型インターフェイス/参照型のメンバーのプロパティを実装する際に問題に直面しています。次のコードがあります。
public interface IPort: IBaseModel
{
string PortName {get;set;}
}
public class Port : IPort
{
public string PortName {get;set;}
}
public abstract class AbstractBaseModel : IBaseModel
{
List<IBaseModel> children = new List<IBaseModel>();
public void RegisterProperties(IBaseModel model)
{
// code to get the property info using reflection and update the children list.
// children.Add(propertyinfo.getValue(this,null))
}
}
public Vessel : AbstractBaseModel
{
public IPort Port {get ; set;}
public Vessel()
{
base.RegisterProperties(this);
}
}
Vessel クラスでは、プロパティ PortName をさまざまな形式で記述すると、残りのコードでさまざまな動作が見られます。リフレクションを使用して抽象基本クラスのプロパティを呼び出す必要がある場合、さまざまな実装の違いと、どれが最適かを知る必要があります。
1. private IPort port;
public IPort Port
{
get
{
if (port == null)
port = new Port();
return port;
}
set {port = value;}
}
2. public IPort Port {get ; set;}
3. public IPort Port {
get
{
if (port == null)
port = new Port();
return port;
}
set {}
}
また、Entity フレームワークを使用して Vessel クラスをロードしています。驚いたことに、LINQ コードで Vessel 型のオブジェクトを選択するたびに、set アクセサーが呼び出されます (「値」をプロパティの null として)。これに関する指針は役に立ちます。