如果我有以下的通用接口:我應該使用接口來強制執行泛型嗎?
public interface IValidator<T>
{
Boolean IsValid(T entity_);
}
我可以通過以下方式使用它呢?這是否違反面向對象的編程指南?
public PathValidator : IValidator<String>
{
}
如果我有以下的通用接口:我應該使用接口來強制執行泛型嗎?
public interface IValidator<T>
{
Boolean IsValid(T entity_);
}
我可以通過以下方式使用它呢?這是否違反面向對象的編程指南?
public PathValidator : IValidator<String>
{
}
是在使用接口的反對任何形式的最佳實踐?
不,這很好,很普遍(假設你的接口不是空的,並且有一個方法簽名,如bool IsValid(T entity)
)。
是什麼讓你覺得它應該是?如果你讓我們知道,我們可以詳細說明。
是的,我有基本上沿着bool isValid(T實體)的線條。 我認爲這可能違背了大多數人會做的事,因爲我在類的定義中指定了類型。我認爲這可能會讓你認爲通用接口是無用的。 – adamwtiko 2010-12-13 15:17:27
@Adam Witko:好吧,考慮一下替代方案:'interface IStringValidator {bool IsValid(string s); }','interface IFooValidator {bool IsValid(Foo f); ''等等,是否更好? – jason 2010-12-13 15:22:21
我不得不說可能不是! – adamwtiko 2010-12-13 15:23:22
因爲不是,只要看看像IList這樣的通用集合接口。
如果這實際上是接口的主體,那麼擁有沒有契約的接口(也就是說,它不需要實現任何方法)通常不是一個好主意。通常這提示您的設計存在問題。
空接口(標記接口)通常是不好的做法,因爲您應該使用Attribute來代替。
但是,如果它只是空的,因爲您省略了它來簡化示例,那麼它對我來說看起來非常好。
爲什麼要這樣呢? – Heinzi 2010-12-13 15:15:36
完美無瑕。看看像IComparable這樣的接口。 – riwalk 2010-12-13 15:16:47
adam,這有點類似於我前些日子給你提出的建議/建議界面。我認爲你很好採用這種方法100% - 哈哈http://stackoverflow.com/questions/4399447/generic-method-cannot-implicitly-convert-type-string-to-t/4399490#4399490 – 2010-12-13 15:59:31