我在为interface / reference类型的成员实现属性方面遇到了困难。我有以下代码:
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访问器(将'value'作为属性的null)。任何指针都会有所帮助。