在C#中访问内部泛型的成员

时间:2014-08-27 15:42:16

标签: c# generics interface

我定义了两个接口:

public interface IData
{        
   double value { set; get; }
}

public interface IInterval<C, M>
{
   C left { set; get; }
   M data { set; get; }
}

然后我使用这两个接口进行以下类声明。

public class TESTClass<I, M>
       where I : IInterval<int, M>, new()
       where M : IData
{ 
   public I interval{ set; get; }

   public TESTClass()
   {
       // This is invalid, cos property value is not visible at initialization ... 
       interval = new I() { left = 0, data.value = 0 };

       // instead I have to do as: 
       interval = new I() { left = 0 };
       interval.data.value = 0;
   }
}
我在这里错过了什么吗? 如果你能帮助我解决这个问题,我将不胜感激。

2 个答案:

答案 0 :(得分:2)

嗯,你当然可以这样做。语法有点不同。

public TESTClass()
{
    interval = new I()
    {
        left = 0,
        data = //Reads data property, 
        {
            value = 0 //set data.value to 0
        }
    }
}

答案 1 :(得分:0)

您无法使用member-access运算符(.)访问对象初始值设定项中的子属性。

这有效:

public class TESTClass<I, M>
       where I : IInterval<int, M>, new()
       where M : IData, new()
{ 
   public I interval{ set; get; }

   public TESTClass()
   {
       interval = new I() { left = 0, data = new M {value = 0} };
   }
}