难以实现interface / reference类型成员的属性

时间:2012-08-15 09:08:33

标签: c# linq oop

我在为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)。任何指针都会有所帮助。

0 个答案:

没有答案