Em C #, o código a seguir é válido
interface I{
int property{get;set;}
}
O que não faz nenhum sentido para mim. Isso parece quebrar um dos princípios mais importantes das interfaces: falta de estado (em outras palavras, nenhum campo). A propriedade não cria um campo privado implícito? Isso não seria realmente ruim para interfaces?
c#
interfaces
properties
Restabelecer Monica
fonte
fonte
Respostas:
Acho que a parte confusa é que, se você escreve
int Property { get; set; }
dentro de uma classe, é uma propriedade automática com um campo implícito de apoio.Mas se você escrever exatamente a mesma coisa em uma interface, não é propriedade automática , apenas declara que a propriedade faz parte da interface e que qualquer tipo que implemente a interface deve conter essa propriedade (como propriedade automática ou não ), mas não cria o campo de apoio.
Uma maneira de ver a diferença é escrever
int Property { get; }
: isso é válido em uma interface e declara uma propriedade que possui apenas um getter, mas nenhum setter. Mas não será compilado em uma classe (a menos que você esteja usando o C # 6.0), porque a propriedade automática precisa ter um setter.fonte
Definir a propriedade como você mostrou é o mesmo que definir métodos
int GetProperty()
evoid SetProperty(int i)
. As propriedades são poderosas em atalho em C #.Uma propriedade não cria implicitamente um campo privado em C #. Essa é a implementação padrão de
auto-property
, por exemplopublic string MyString { get; set;}
- uma propriedade que define a lógica personalizada noget
método não gera um campo privado implícito.Por fim, como as interfaces estão preocupadas com a API pública , o que importaria se a implementação de uma propriedade de interface dependesse de um campo privado - implícito ou não? Isso está oculto para os consumidores da interface, independentemente.
fonte
Propriedades são métodos! Um campo de apoio será adicionado à classe que implementa a interface (manualmente ou através de uma propriedade automática).
fonte