Como implementar uma propriedade em uma interface


135

Eu tenho interface IResourcePolicycontendo a propriedade Version. Eu tenho que implementar essa propriedade que contém valor, o código escrito em outras páginas:

IResourcePolicy irp(instantiated interface)
irp.WrmVersion = "10.4";

Como posso implementar propriedade version?

public interface IResourcePolicy
{
   string Version
      {
          get;
          set;
      }
}

1
por que você deseja implementar alguma coisa na interface? Lá você apenas especificar a interface ...
Stefan Steinegger

Respostas:


296

Na interface, você especifica a propriedade:

public interface IResourcePolicy
{
   string Version { get; set; }
}

Na classe de implementação, você precisa implementá-lo:

public class ResourcePolicy : IResourcePolicy
{
   public string Version { get; set; }
}

Isso parece semelhante, mas é algo completamente diferente. Na interface, não há código. Você apenas especifica que existe uma propriedade com um getter e um setter, o que quer que eles façam.

Na classe, você realmente os implementa. A maneira mais curta de fazer isso é usar esta { get; set; }sintaxe. O compilador criará um campo e gerará a implementação de getter e setter para ele.


Como você diz que Versioné público na classe? Ahh, eu vejo o meu problema: se você implementar a interface explicitamente (por exemplo IResourcePolicy.Version, você não pode definir se é público.
PeterX

5
Você está certo, deve ser público. Eu consertei isso. Não me importei muito com isso, porque não é relevante para as coisas que tentei explicar.
Stefan Steinegger

7
Claro que é relevante! Se você deseja fornecer uma boa resposta, precisa simplificá-la para as pessoas. Para que não tropeçam no próximo problema.
Bitterblue

21

Você quer dizer assim?

class MyResourcePolicy : IResourcePolicy {
    private string version;

    public string Version {
        get {
            return this.version;
        }
        set {
            this.version = value;
        }
    }
}

1
isso eu sei ,, mas eu já atribui valores tais que irp.WrmVersion = "10.4"; veja a minha pergunta ,, eu não necessidade de perder esse valor ,, eu tenho que passá-lo
peter

16

As interfaces não podem conter nenhuma implementação (incluindo valores padrão). Você precisa mudar para a classe abstrata.


Isso é o que como eu pode implementar esta propriedade em outro lugar
Peter

criar um @petr classe que implementa essa interface, do que criar instância para essa classe e atribuir a variável que tem tipo de interface
Arsen Mkrtchyan

4
Eu votaria na primeira frase. Porém, classes base abstratas sempre devem ser evitadas se uma interface for suficiente. Portanto, antes de saber qual problema realmente deve ser resolvido, você não deve sugerir a criação de uma classe base.
276 Stefan Steinegger #

2
@ Stefan, pela segunda frase, eu quis dizer que, se ele realmente precisa que um valor padrão seja introduzido, ele deve usar a classe abstrata.
21730 Vitaliy Liptchinsky

1

O exemplo simples de uso de uma propriedade em uma interface:

using System;
interface IName
{
    string Name { get; set; }
}

class Employee : IName
{
    public string Name { get; set; }
}

class Company : IName
{
    private string _company { get; set; }
    public string Name
    {
        get
        {
            return _company;
        }
        set
        {
            _company = value;
        }   
    }
}

class Client
{
    static void Main(string[] args)
    {
        IName e = new Employee();
        e.Name = "Tim Bridges";

        IName c = new Company();
        c.Name = "Inforsoft";

        Console.WriteLine("{0} from {1}.", e.Name, c.Name);
        Console.ReadKey();
    }
}
/*output:
 Tim Bridges from Inforsoft.
 */

0
  • mas eu já atribui valores tais que irp.WrmVersion = "10.4";

J.Random Coder responde e inicializa o campo da versão.


private string version = "10.4';

0

Você deve usar a classe abstrata para inicializar uma propriedade. Você não pode inicializar no Inteface.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.