C#メモ インターフェースにプロパティが定義できるようになってたので試してみる

C#

知らんかったな…使う場面があるか分からんけど試してみることに。

で、コード。
まずはインターフェースのとこ。
プロパティはメソッドの定義と同じようにアクセス修飾子はつけない。

/// <summary>
/// プロパティーを持つインターフェース
/// </summary>
interface InterfaceProto
{
	/// <summary>
	/// オブジェクトが持つプロパティ
	/// </summary>
	string Value
	{
		get;
	}

	/// <summary>
	/// プロパティーをダンプする
	/// </summary>
	void Dump();
}

んで、クラスの定義。
プロパティはインターフェースで定義したものを実装、かつ、アクセス修飾子にpublicを師弟する必要がある。
public class Proto : InterfaceProto
{
	/// <summary>
	/// オブジェクトが持つプロパティ
	/// </summary>
	public string Value
	{
		get;
	} = string.Empty;

	/// <summary>
	/// コンストラクタ
	/// </summary>
	/// <param name="value">値</param>
	public Proto(string value)
	{
		this.Value = value;
	}

	/// <summary>
	/// プロパティーをダンプする
	/// </summary>
	public void Dump()
	{
		Console.WriteLine(this.Value);
	}
}

呼び出し川はこんな感じ。。
class Program
{
	static void Main(string[] args)
	{
		Proto proto = new Proto("Hello!!");
		proto.Dump();
	}
}

んで、実行するとこんな感じ。

当然だけど、クラス側でValueを定義しないと叱られる…。

error CS0535: 'Proto' はインターフェイス メンバー 'InterfaceProto.Value' を実装しません。

あと、インターフェースではプロパティの初期化はできない(ビルドエラーになる)ので注意。
error CS8050: 自動実装プロパティのみが初期化子を持つことができます。

んまま、明日への自分へのメモって事で。