如何在接口中实现属性


135

我有IResourcePolicy包含该属性的接口Version。我必须实现包含值的该属性,该属性在其他页面中编写:

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

如何实现财产version

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

1
为什么要在接口中实现任何功能?您只需在其中指定接口...
Stefan Steinegger's

Answers:


296

在界面中,指定属性:

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

在实现类中,您需要实现它:

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

看起来很相似,但是完全不同。在界面中,没有代码。您只需指定一个具有getter和setter的属性,无论它们将做什么。

在课堂上,您实际上实现了它们。最简单的方法是使用此{ get; set; }语法。编译器将创建一个字段并为其生成getter和setter实现。


您怎么说Version在课堂上是公开的?嗯,我看到了我的问题:如果您明确实现接口(例如IResourcePolicy.Version,您无法定义它是否是公共的。)
PeterX 2014年

5
没错,应该公开。我修好了它。我对此并不在乎,因为它与我试图解释的内容无关。
Stefan Steinegger

7
当然是相关的!如果您想提供一个很好的答案,则需要使它变得简单。因此,他们不会偶然遇到下一个问题。
Bitterblue

21

你的意思是这样吗?

class MyResourcePolicy : IResourcePolicy {
    private string version;

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

1
我知道,但是我已经分配了值,例如irp.WrmVersion =“ 10.4”; 看到我的问题,我不需要失去那个价值,我必须通过它
彼得

16

接口不能包含任何实现(包括默认值)。您需要切换到抽象类。


那就是我该如何在其他地方实现此属性
彼得

创建一个实现该接口的@petr类,而不是为该类创建实例并分配给具有接口类型的变量
Arsen Mkrtchyan 2009年

4
我将对第一句话投票。但是,如果接口足够,则应始终避免使用抽象基类。因此,在不知道应该实际解决什么问题之前,不建议创建基类。
Stefan Steinegger,2009年

2
@Stefan,第二句话,我的意思是,如果他确实需要引入默认值,那么他应该使用抽象类。
Vitaliy Liptchinsky 09年

1

在接口中使用属性的简单示例:

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.
 */

0
  • 但是我已经分配了值,使得irp.WrmVersion =“ 10.4”;

J.Random Coder的答案和初始化版本字段。


private string version = "10.4';

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.