基本クラスがアクセサー関数を提供し、インスタンス化されたクラスが値を提供するだけでよいクラスを作成する方法を見つけようとしています。
このようなもの:
public interface IBaseClass
{
int GetHandlerID();
}
public abstract class AbstractClass : IBaseClass
{
private int HandlerID;
public virtual int GetHandlerID()
{
return (this.HandlerID);
}
}
public class MyClass : AbstractClass
{
int HandlerID = 1;
}
class Program
{
static void Main(string[] args)
{
MyClass newClass = new MyClass();
Console.WriteLine("HandlerID: {0}"), newClass.GetHandlerID() );
}
}
クラスは MyClass 変数の代わりに AbstractClass の HandlerID を読み取るため、この方法では機能しません。Virtual または Abstract の使用は変数に対して有効ではないため、新しいクラスが派生するたびにプロパティを実装する必要がある以外に、これを行う方法がわかりません。
私がやろうとしているのは、人々が独自のプラグイン クラスを構築するためのインターフェイスを提供することであり、基本クラスで提供されるアクセサー メソッドを使用します。クラスの新しいインスタンスを作成するたびに、同じプロパティ メソッドを実装する必要はありません。
私は自分がやりたいことをする方法を見つけました。このようにして、基本クラスにデフォルトのゲッター/セッターを持たせることができ、基本を使用する各定義でそれらを作成する必要がなくなります。それは私が探していたものではありませんが、うまくいきます。
public abstract class AbstractClass : IBaseClass
{
private int m_HandlerID = 0;
public int HandlerID
{
get { return (this.m_HandlerID); }
set { this.m_HandlerID = value; }
}
private string m_HandlerDescription = "undefined";
public string HandlerDescription
{
get { return this.m_HandlerDescription; }
set { this.m_HandlerDescription = value; }
}
}
public class MyClass: AbstractClass
{
public MyClass()
{
HandlerID = 1;
HandlerDescription = "MyClass";
}
}
class Program
{
static void Main(string[] args)
{
MyClass newClass = new MyClass();
Console.WriteLine("Handler: {0}[{1}]", newClass.HandlerDescription, newClass.HandlerID);
}
}