我的系统中有几个类
//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 不同。因此,如果我将引用声明为 BaseTranmission 类型并将其指向 EmailTranmission 类型的实例,我将无法访问 EmailTransmission 的 EmailMetadata 属性。
我想知道我在上面所做的是否是对多态性的滥用,以及它是否以某种方式“破坏”了多态性。如果它滥用多态性,那么正确的方法是什么。