インターフェイスにプロパティを実装する方法


134

IResourcePolicyプロパティを含むインターフェイスがありますVersion。私は値を含むこのプロパティを実装しなければなりません、他のページで書かれたコード:

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

プロパティを実装するにはどうすればよいversionですか?

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

1
なぜインターフェースに何かを実装したいのですか?あなただけ...インターフェイスが指定
ステファンSteinegger

回答:


295

インターフェースで、プロパティを指定します。

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

実装クラスでは、それを実装する必要があります。

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

これは同じように見えますが、まったく異なるものです。インターフェースにはコードはありません。ゲッターとセッターを備えたプロパティがあることを指定するだけです。

クラスでは、実際にそれらを実装します。これを行う最も簡単な方法は、この{ get; set; }構文を使用することです。コンパイラーはフィールドを作成し、そのゲッターとセッターの実装を生成します。


それVersionはクラスで公開されているとどう言いますか?ああ、私の問題がわかります。インターフェイスを明示的に実装した場合(たとえばIResourcePolicy.Version、それがパブリックであるかどうかを定義できない場合)
PeterX

5
あなたは正しい、それは公開されるべきです。それを私が直した。説明しようとしたこととは関係ないので、あまり気にしませんでした。
Stefan Steinegger 2016

7
もちろん、関連性があります!良い答えを出したい場合は、人々にわかりやすくする必要があります。したがって、彼らは次の問題につまずきません。
Bitterblue 2016年

21

あなたはこのような意味ですか?

class MyResourcePolicy : IResourcePolicy {
    private string version;

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

1
これは知っていますが、irp.WrmVersion = "10.4"のような値をすでに割り当てています。私の質問を参照してください、私はその値を失う必要はありません、私はそれを渡す必要があります
ピーター

16

インターフェイスには、実装(デフォルト値を含む)を含めることはできません。抽象クラスに切り替える必要があります。


それが、このプロパティを他の場所にどのように実装できるかです
peter

そのインターフェースを実装するクラス@petrを作成し、そのクラスにインスタンスを作成して、インターフェースタイプを持つ変数に割り当てます
Arsen Mkrtchyan

4
最初の文に投票します。ただし、インターフェイスで十分な場合は、抽象基本クラスを常に回避する必要があります。そのため、実際に解決する必要がある問題を理解する前に、基本クラスの作成を勧めるべきではありません。
Stefan Steinegger、2009年

2
@ Stefan、2番目の文で、私が本当にデフォルト値を導入する必要がある場合は、抽象クラスを使用する必要があることを意味しました。
Vitaliy Liptchinsky、2009年

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';

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.