Можете ли вы определить интерфейс так, чтобы класс, который его реализует, должен содержать член, который также принадлежит этому классу? - PullRequest
6 голосов
/ 01 февраля 2012

По сути, я хочу реализовать класс, который может содержать список ссылок на экземпляры того же типа.Что-то вроде следующего:

interface IAccessibilityFeature
{
    List<IAccessibilityFeature> Settings { get; set; }
}

class MyAccess : IAccessibilityFeature
{
    List<MyAccess> Settings { get; set; }
}

Я знаю, что это не скомпилируется, потому что интерфейс явно говорит, что мой Settings должен иметь тип List<IAccessibilityFeature>.За мной следуют некоторые указания относительно правильного способа достижения того, что я пытаюсь сделать в классе MyAccess.

Ответы [ 2 ]

14 голосов
/ 01 февраля 2012

Попробуйте это:

interface IAccessibilityFeature<T> where T : IAccessibilityFeature<T>
{
    List<T> Settings { get; set; }
}

class MyAccess : IAccessibilityFeature<MyAccess>
{
    List<MyAccess> Settings { get; set; }
}
3 голосов
/ 01 февраля 2012

Это можно сделать с помощью:

interface IAccessibilityFeature<T>
{
    List<T> Settings { get; set; }
}

class MyAccess : IAccessibilityFeature<MyAccess>
{
    List<MyAccess> Settings { get; set; }
}
...