如何在C#中专门化派生类的成员类型?

时间:2018-10-08 01:52:14

标签: c#

我想做这样的事情:

enter image description here

Plan具有Contact属性,并且有PlanContact的特殊化。

我尝试了

abstract class Contact { }

class SpecialContact : Contact { }

abstract class Plan {
   public virtual Contact contact;
}

class SpecialPlan : Plan {
   public override SpecialContact contact;
}

但是C#中禁止类型重写。

如何建模并专门化子类的子属性?

我只需要强制执行SpecialPlan仅具有SpecialContact ..而不具有其他Contact

1 个答案:

答案 0 :(得分:3)

b

如果您要覆盖get / set属性。

void Main()
{
    var sp = new SpecialPlan();
    sp.Contact = new SpecialContact(); // new Contact(); won't compile
}

abstract class Contact
{
}

class SpecialContact : Contact
{
}

abstract class Plan<T> where T: Contact
{
    public T Contact { get; set; }
}

class SpecialPlan : Plan<SpecialContact>
{
}