を実装:ベースの仮想メソッドを持つクラスのみ次のように定義された基本クラスを持っている場合は、ガード句
public abstract class BaseMessageObject<T> where T : Entity
{
public string Message { get; set; }
public abstract BaseMessageObject<T> BuildMessage(T entity);
}
を、あなたは次のように定義されたHTMLObjectMessagesの基本クラスを持っている:
public abstract class HtmlMessageObject<T> : BaseMessageObject<T>
where T : Entity
{
public override abstract BaseMessageObject<T> BuildMessage(T entity);
}
次のようにHtmlMessageを具体的に実装しています:
public class SocialSecurityVerificationHtmlMessageObject<T>:HtmlMessageObject<T>
where T : SomeConcreteEntity
{
public override BaseMessageObject<T> BuildMessage(T entity)
{
SocialSecurityVerificationHtmlMessageObject<T> message =
new SocialSecurityVerificationHtmlMessageObject<T>();
//do some stuff to build the message
}
}
次のようにBase MessageObjectにガード句を配置します。
public abstract class BaseMessageObject<T> where T : Entity
{
public string Message { get; set; }
public virtual BaseMessageObject<T> BuildMessage(T entity)
{
if (null == entity)
throw new ArgumentNullException(entity)
throw new NotImplemenetedException("");
}
}
これについては何か間違っています。これをリファクタリングする必要がありますか?
+1:[テンプレートメソッドパターン](http://en.wikipedia.org/wiki/Template_method_pattern)を公正に使用しているようです。 – rsenna