タイプがT
の基本クラスのアクセス可能なメンバーから派生クラスのこれらのプロパティにアクセスすることができます(もちろん、派生クラスの任意のメンバーを介して)そのタイプはAccount
です)。
は(抽象型のパブリックコンストラクタにはポイントはありませんので、私は保護にこれらを変更しました。)例えば
、Account
タイプはboolean型IsOverdue
性質があることを想定:
public abstract class BaseUI<T> : INotifyPropertyChanged, IChangeTracking, IDataErrorInfo, ISelectable
where T: new()
{
protected BaseUI() {}
protected BaseUI(T data) { this.Data = data; }
protected T Data { get; private set; }
}
public class AccountUI : BaseUI<Account>
{
public AccountUI() : base() {}
public AccountUI(Account data) : base(data) {}
public void SomeMethod()
{
if (this.Data.IsOverdue)
{
//... handle overdue account
}
}
}
を
BaseUI<T>
への参照が汎用コンテキストである場合があるので、コンパイル時に型引数が何であるか分からないことがあります。その場合、あなたは、基本クラスで抽象メソッドが必要になります。この例では
public abstract class BaseUI<T> : INotifyPropertyChanged, IChangeTracking, IDataErrorInfo, ISelectable
where T: new()
{
protected BaseUI() {}
protected BaseUI(T data) { this.Data = data; }
protected T Data { get; private set; }
public abstract void SomeMethod();
}
、あなたがAccountUI.SomeMethodの宣言にoverride
キーワードを追加する必要があります。
public class AccountUI : BaseUI<Account>
{
public AccountUI() : base() {}
public AccountUI(Account data) : base(data) {}
public override void SomeMethod()
{
if (this.Data.IsOverdue)
{
//... handle overdue account
}
}
}
今BaseUI<T>
への参照にはSomeMethod
と電話することができます。派生クラスは、実装の提供を担当します。最初の例と同様に、派生クラスはT
で指定された型引数を知っているため、その型のアクセス可能なメンバを使用できます。
*ここでは*プロパティにアクセスする必要がありますか?それらは制約付きインターフェイスの一部として含まれていますか? –
(参考のため、最初のコンストラクタに入力ミスがあります) – Bridge
複数のインスタンスでクラスにアクセスする必要がありますが、ほとんどはUIなどのコンシューマにあります。 –