代码之家  ›  专栏  ›  技术社区  ›  Daniel Santos

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

c#
  •  3
  • Daniel Santos  · 技术社区  · 7 年前

    我想这样做:

    enter image description here

    在哪里? Plan Contact 有一个专门化的 计划 联系人 .

    我试过了

    abstract class Contact { }
    
    class SpecialContact : Contact { }
    
    abstract class Plan {
       public virtual Contact contact;
    }
    
    class SpecialPlan : Plan {
       public override SpecialContact contact;
    }
    

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

    如何对此进行建模并专门化子类的子属性?

    SpecialPlan 只会有 SpecialContact .. 不是别的 联系人

    1 回复  |  直到 7 年前
        1
  •  3
  •   Han    7 年前
    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>
    {
    }
    

    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
    {
        protected T contact;
        public virtual T Contact { get { return contact; } set { contact = value; } }
    }
    
    class SpecialPlan : Plan<SpecialContact>
    {
        public override SpecialContact Contact { get { return contact; } set { contact = value; } }
    }