Cómo implementar una propiedad en una interfaz

135

Tengo una interfaz que IResourcePolicycontiene la propiedad Version. Tengo que implementar esta propiedad que contiene valor, el código escrito en otras páginas:

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

¿Cómo puedo implementar la propiedad version?

public interface IResourcePolicy
{
   string Version
      {
          get;
          set;
      }
}
Peter
fuente
1
¿Por qué quieres implementar algo en la interfaz? Ahí solo especificas la interfaz ...
Stefan Steinegger

Respuestas:

296

En la interfaz, especifique la propiedad:

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

En la clase de implementación, debe implementarlo:

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

Esto se ve similar, pero es algo completamente diferente. En la interfaz, no hay código. Simplemente especifica que hay una propiedad con un captador y un establecedor, independientemente de lo que hagan.

En la clase, en realidad los implementas. La forma más corta de hacerlo es usar esta { get; set; }sintaxis. El compilador creará un campo y generará la implementación getter y setter para él.

Stefan Steinegger
fuente
¿Cómo se dice que Versiones público en la clase? Ahh, veo mi problema: si implementa la interfaz explícitamente (por ejemplo IResourcePolicy.Version, no puede definir si es pública.)
PeterX
55
Tienes razón, debería ser público. Lo arreglé. No me importó mucho esto, porque no es relevante para las cosas que intenté explicar.
Stefan Steinegger
77
¡Por supuesto que es relevante! Si desea ofrecer una buena respuesta, debe hacerlo simple para las personas. Para que no tropiecen con el siguiente problema.
Bitterblue
21

¿Quieres decir así?

class MyResourcePolicy : IResourcePolicy {
    private string version;

    public string Version {
        get {
            return this.version;
        }
        set {
            this.version = value;
        }
    }
}
J. Random Coder
fuente
1
esto lo sé, pero ya asigné valores tales que irp.WrmVersion = "10.4"; vea mi pregunta, no necesito perder ese valor, tengo que pasarlo
Peter
16

Las interfaces no pueden contener ninguna implementación (incluidos los valores predeterminados). Necesitas cambiar a la clase abstracta.

Vitaliy Liptchinsky
fuente
Eso es, ¿cómo puedo implementar esta propiedad en otro lugar
Peter el
crear un @petr clase que implementa la interfaz, de crear una instancia de esa clase y asignar a la variable que tienen el tipo de interfaz
Arsen Mkrtchyan
44
Yo votaría por la primera oración. Pero las clases base abstractas siempre deben evitarse si una interfaz es suficiente. Entonces, antes de saber qué problema debería resolverse realmente, no debe sugerir crear una clase base.
Stefan Steinegger
2
@Stefan, con la segunda oración quise decir que si realmente necesita un valor predeterminado para ser introducido, entonces debería usar la clase abstracta.
Vitaliy Liptchinsky
1

El ejemplo simple de usar una propiedad en una interfaz:

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.
 */
Bernard Czaiński
fuente
0
  • pero ya asigné valores tales que irp.WrmVersion = "10.4";

Respuesta de J.Random Coder e inicializar el campo de versión.


private string version = "10.4';
kazuk
fuente
0

Debe usar la clase abstracta para inicializar una propiedad. No se puede iniciar en Inteface.

Abdus Salam Azad
fuente