2 votes

setter pour une propriété non définie dans l'interface

Si mon interface a la signature seulement pour le getter comme :

public interface IInterface 
{
   object Id{get;}
}

Donc l'interface impose seulement un getter public pour Id sur toute classe implémentée. Maintenant, quand j'ai la classe :

public class Simple : IInterface
{
  object Id
  {
    get{return something;} 
    set{ do something else;}
  }
}

le compilateur se plaint du setter car celui-ci n'est pas défini dans l'interface. Cependant, je n'ai rien imposé dans le contrat de l'interface pour un setter ; pourquoi l'interface insiste-t-elle sur le setter sur les classes dérivées ?

11voto

Reed Copsey Points 315315

Vous devez juste rendre Id public. Par exemple, ceci compile bien :

public interface IInterface
{
    object Id { get; }
}
public class Simple : IInterface
{
    private int something;
    public object Id
    {
        get { return something; }
        set{ something = (int)value;}
    }
}

1voto

supercat Points 25534

Lors de la conception de .net, Microsoft a décidé qu'il y aurait trois types de propriétés non interchangeables : lecture seule, écriture seule et lecture-écriture. En C#, si l'on déclare une propriété en lecture-écriture portant le même nom qu'une ou plusieurs propriétés d'interface que l'on est censé mettre en œuvre, le compilateur peut automatiquement créer non seulement la propriété en lecture-écriture que le programmeur a effectivement spécifiée, mais aussi les propriétés en lecture seule et/ou en écriture seule nécessaires pour satisfaire les interfaces. Par exemple, si l'interface IReadableFoo implémente une propriété en lecture seule Foo, IWritableFoo implémente une propriété en écriture seule Foo, et IReadWriteFoo hérite de IReadableFoo et IWritablefoo, et implémente une "nouvelle" propriété en lecture-écriture Foo, et une classe ReadWriteFoo implémente IReadWriteFoo et déclare une propriété publique en lecture-écriture Foo, le compilateur fera en sorte que ReadWriteFoo génère des implémentations d'interface de la propriété en lecture seule IReadableFoo. Foo, de la propriété en écriture seule IWritableFoo.Foo et de la propriété en lecture-écriture IReadWriteFoo.Foo.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X