Доступ к членам внутренних дженериков в C #

1

Я определяю два интерфейса следующим образом:

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;
   }
}

я что-то упустил? Буду признателен, если вы поможете мне разобраться в этом.

  • 0
    Почему бы вам не добавить, where M : IData в IInterval<C,M> ?
Теги:
generics
interface

2 ответа

2
Лучший ответ

Ну, вы могли бы это сделать. Синтаксис немного отличается.

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

Вы не можете получить доступ к под-свойствам в инициализаторах объектов с помощью оператора доступа участника (.).

Это работает:

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} };
   }
}
  • 0
    Но это делает что-то заметно другое; это не функционально идентичный код.
  • 0
    Я предполагаю, что это то, что задумал ОП. Даже если бы data.value=0 было разрешено, из их кода это все равно вызовет NullReferenceException .
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню