如何在C#中专门化派生类的成员类型?
我想这样做: 其中如何在C#中专门化派生类的成员类型?,c#,C#,我想这样做: 其中计划具有联系人属性,并且有计划和联系人的专门化 我试过了 abstract class Contact { } class SpecialContact : Contact { } abstract class Plan { public virtual Contact contact; } class SpecialPlan : Plan { public override SpecialContact contact; } 但是类型重写在C#中是被禁止
计划
具有联系人
属性,并且有计划
和联系人
的专门化
我试过了
abstract class Contact { }
class SpecialContact : Contact { }
abstract class Plan {
public virtual Contact contact;
}
class SpecialPlan : Plan {
public override SpecialContact contact;
}
但是类型重写在C#中是被禁止的
如何对此建模并专门化子类的子属性
我只需要强制执行SpecialPlan
将只有SpecialContact
。。没有任何其他联系人
void Main()
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>
{
}
{
var sp=新的SpecialPlan();
sp.Contact=new SpecialContact();//新联系人();无法编译
}
抽象类接触
{
}
班级特别联系人:联系人
{
}
抽象类计划,其中T:Contact
{
公共T联系人{get;set;}
}
班级特别计划:计划
{
}
如果要重写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
{
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; } }
}
void Main()
{
var sp=新的SpecialPlan();
sp.Contact=new SpecialContact();//新联系人();无法编译
}
抽象类接触
{
}
班级特别联系人:联系人
{
}
抽象类计划,其中T:Contact
{
保护T形触点;
公共虚拟T联系人{get{return Contact;}set{Contact=value;}}
}
班级特别计划:计划
{
公共重写特殊联系人{get{return Contact;}set{Contact=value;}}
}
您为什么需要延长联系时间?您是否需要添加方法,或者是否可以让Contact成为一个接口?除非您需要实际实例化Plan
和Contact
,否则可以将它们作为抽象基类。或者,您可以使用接口。或者,您可以将Plan
和SpecialPlan
和Contact
和SpecialContact
之间的区别封装在各种策略类中,这些策略类可以分别是Plan
和Contact
的成员。记住:组合优先于继承我只想强制执行SpecialPlan
将只有SpecialContact
。。没有任何其他的联系人
关于特殊计划
和特殊联系人
有什么特别之处?