1

我在为类型接口/引用类型的成员实现属性时遇到困难。我有以下代码:

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 访问器(属性的“值”为空)。对此的任何指示都会有所帮助。

4

0 回答 0