2009-10-20 7 views
88

J'ai l'interface IResourcePolicy contenant la propriété Version. Je dois mettre en œuvre cette propriété qui contient la valeur, le code écrit dans d'autres pages:Comment implémenter une propriété dans une interface

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

Comment puis-je mettre en œuvre la propriété version?

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

pourquoi ne voulez-vous mettre en œuvre quoi que ce soit dans l'interface? Il vous suffit de spécifier l'interface ... –

Répondre

209

Dans l'interface, vous spécifiez la propriété:

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

Dans la classe mise en œuvre, il faut la mettre en œuvre:

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

Cela ressemble, mais il est quelque chose de complètement différent. Dans l'interface, il n'y a pas de code. Vous spécifiez simplement qu'il y a une propriété avec un getter et un setter, quoi qu'ils fassent.

Dans la classe, vous les implémentez réellement. Le moyen le plus court de le faire est d'utiliser cette syntaxe { get; set; }. Le compilateur va créer un champ et générer l'implémentation getter et setter pour celui-ci.

+0

Comment dites-vous que 'Version' est public dans la classe? Ahh, je vois mon problème: si vous implémentez l'interface * explicitement * (par exemple 'IResourcePolicy.Version'), vous ne pouvez pas définir si c'est public – PeterX

+1

Vous avez raison, ça devrait être public, je l'ai corrigé. Je me soucie beaucoup de cela, car ce n'est pas pertinent pour les choses que j'ai essayé d'expliquer: –

+2

Bien sûr que c'est pertinent! Si vous voulez donner une bonne réponse, vous devez simplifier les choses pour les gens. problème suivant. – Bitterblue

12

Les interfaces ne peuvent contenir aucune implémentation (y compris les valeurs par défaut). Vous devez passer à la classe abstraite.

+0

Est-ce que comment puis-je implémenter cette propriété ailleurs – peter

+0

créer une classe @petr qui implémente cette interface, que créer une instance à cette classe et affecter à la variable qui ont le type d'interface –

+0

signifie que vous pouvez montrer moi le code – peter

17

Vous voulez dire comme ça?

class MyResourcePolicy : IResourcePolicy { 
    private string version; 

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

ce que je sais, mais j'ai déjà assigné des valeurs telles que irp.WrmVersion = "10.4"; voir ma question ,, je ne dois pas perdre cette valeur, je dois le passer – peter

0
  • mais j'ai déjà affecté des valeurs telles que irp.WrmVersion = "10.4";

Réponse de J.Random Coder et initialiser le champ de version.


private string version = "10.4'; 
1

L'exemple simple d'utilisation d'une propriété dans une 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. 
*/ 
Questions connexes