私のシステムにはいくつかのクラスがあります
//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 プロパティにアクセスできなくなります。
私が上で行っていることがポリモーフィズムの誤用であるかどうか、それがポリモーフィズムを何らかの方法で「壊す」かどうかを知りたいです。そして、ポリモーフィズムを悪用している場合、これを行う正しい方法は何ですか。