我的系统中有几个类
//this was not made an Interface for some WCF reasons
public abstract class BaseTransmission
{
protected internal abstract string Transmit();
//other common properties go here
}
还有一些子类,比如
public class EmailTransmission : BaseTransmission
{
//This property is added separately by each child class
public EmailMetadata Metadata { get; set; }
protected internal override string Transmit()
{
//verify email address or throw
if (!Metadata.VerifyMetadata())
{
throw new Exception();
}
}
}
在其他地方,我创建了一个带有签名Transmit(BaseTransmission transmission)
的方法。我从代码的另一部分调用此方法,如下所示:
TransService svc = new TransService();
EmailTransmission emailTrans = new EmailTransmission(); // this inherits from BaseTransmission
svc.Transmit(emailTrans);
这解决了我的目的。但是平时看到多态的例子,总是看到引用类型是基类类型,指向子类类型的实例。所以通常在多态性的典型例子中
EmailTransmission emailTrans = new EmailTransmission();
通常是
BaseTransmission emailTrans = new EmailTransmission();
我不能这样做,因为 EmailTransmission EmailMetadata 不同于 FaxMetadata。因此,如果我将引用声明为 BaseTransmission 类型并将其指向 EmailTransmission 类型的实例,我将无法访问 EmailTransmission 的 EmailMetadata 属性。
我想知道我上面所做的是否是对多态性的滥用以及它是否以某种方式“破坏”了多态性。如果它滥用多态性,那么正确的做法是什么。
最佳答案
这是完全正确的。多态模式用在 TransService
服务 Transmit
方法中。
它适用于可以在一个或多个类中变形
的类。
您是使用基类还是派生类来声明变量取决于您的具体情况。
关于c# - 这是使用多态性的正确方法吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19053728/