考慮下面的代碼示例時:特定類型的實現類使用的接口
interface IData {
int Count();
}
interface IOperations {
IData Foo();
double Bar(IData a);
}
class Data1 : IData {
public int Count() { return 37; }
public double SomethingElse { get; set; }
}
class Ops1 : IOperations
{
public Data1 Foo() { return new Data1(); } // want to return specific type here
public double Bar(Data1 x) { ... } // want to get specific type here
// and not use operator as everywhere
}
// more definitions of classes Data2, Ops2, Data3, Ops3, ...
// some code:
Ops1 a = new Ops1();
Data1 data = a.Foo(); // want Data1 here not IData!
double x = a.Bar(data);
我當然可以只使用public IData Foo() { return new Data1(); }
:
// some code
Ops1 a = new Ops1();
Data1 data = a.Foo() as Data1;
但as
無處不在,代碼正迅速成爲混亂。
我不知道是否有一個良好的設計模式,以清晰和強大的方式實現這一目標?
編輯:是很重要,是行動和數據共享一個公共基類:
List<IOperations> ops = ...;
List<IData> data = ...;
List<double> result = ...;
for(int i=0; i<ops.Count; i++)
result[i] = ops[i].Bar(data[i]);
因此,對於具有返回類型的情況下,我不知道,這是被禁止的,因爲我滿足要求的界面。在參數情況下,可能需要一些額外的(模板)層。
的C#什麼版本/ .NET您使用的? – 2010-08-14 14:34:37