我在为类型接口/引用类型的成员实现属性时遇到困难。我有以下代码:
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 {}
}
另外,我正在使用实体框架来加载我的 Vessel 类。令我惊讶的是,每次我在 LINQ 代码中选择 Vessel 类型的对象时都会调用 set 访问器(属性的“值”为空)。对此的任何指示都会有所帮助。