我知道你不能在界面中有一个构造函数,但这就是我想要做的:
interface ISomething
{
void FillWithDataRow(DataRow)
}
class FooClass<T> where T : ISomething , new()
{
void BarMethod(DataRow row)
{
T t = new T()
t.FillWithDataRow(row);
}
}
我真的想以某种方式用构造函数替换ISomething
的{{1}}方法。
这样,我的成员类可以实现接口并且仍然是只读的(它不能使用FillWithDataRow
方法)。
有没有人会有我想要的模式?
答案 0 :(得分:6)
使用抽象类代替?
如果你想要,你也可以让你的抽象类实现一个接口......
interface IFillable<T> {
void FillWith(T);
}
abstract class FooClass : IFillable<DataRow> {
public void FooClass(DataRow row){
FillWith(row);
}
protected void FillWith(DataRow row);
}
答案 1 :(得分:3)
(我应该先检查一下,但我很累 - 这主要是duplicate。)
要么有工厂界面,要么将Func<DataRow, T>
传递给构造函数。 (它们大部分是等价的,真的。接口可能更适合依赖注入,而委托则不那么繁琐。)
例如:
interface ISomething
{
// Normal stuff - I assume you still need the interface
}
class Something : ISomething
{
internal Something(DataRow row)
{
// ...
}
}
class FooClass<T> where T : ISomething , new()
{
private readonly Func<DataRow, T> factory;
internal FooClass(Func<DataRow, T> factory)
{
this.factory = factory;
}
void BarMethod(DataRow row)
{
T t = factory(row);
}
}
...
FooClass<Something> x = new FooClass<Something>(row => new Something(row));