¿Cómo se implementa un setter privado cuando se utiliza una interfaz?


He creado una interfaz con algunas propiedades.

Si la interfaz no existiera, todas las propiedades del objeto de clase se establecerían en

{get; private set; }

Sin embargo, esto no está permitido cuando se utiliza una interfaz,por lo que esto se puede lograr y, si es así, ¿cómo?

Author: dotnetnoob, 2013-08-15

2 answers

En la interfaz solo puede definir getter para su propiedad

interface IFoo
{
    string Name { get; }
}

Sin embargo, en tu clase puedes extenderla para tener un private setter -

class Foo : IFoo
{
    public string Name
    {
        get;
        private set;
    }
}
 186
Author: Rohit Vats,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-15 09:48:37

La interfaz define la API pública. Si la API pública contiene solo getter, entonces usted define solo getter en interfaz:

public interface IBar
{
    int Foo { get; }    
}

Private setter no es parte de public api (como cualquier otro miembro privado), por lo que no puede definirlo en interface. Pero usted es libre de agregar cualquier miembro (privado) a la implementación de la interfaz. En realidad no importa si setter se implementará como público o privado, o si habrá setter:

 public int Foo { get; set; } // public

 public int Foo { get; private set; } // private

 public int Foo 
 {
    get { return _foo; } // no setter
 }

 public void Poop(); // this member also not part of interface

Setter no es parte de la interfaz, por lo que no puede ser llamado a través de su interfaz:

 IBar bar = new Bar();
 bar.Foo = 42; // will not work thus setter is not defined in interface
 bar.Poop(); // will not work thus Poop is not defined in interface
 17
Author: Sergey Berezovskiy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-15 09:52:26