我正在尝试创建一个包含泛型委托的接口。然后我希望实现接口的类决定实际的类型方法,或者最好甚至返回另一个委托。
以下是一些描述我正在努力实现的内容的代码。
public delegate void GenericMethod<T>(T arg);
public delegate void StringMethod(string str);
public delegate void ByteMethod(byte bt);
public interface ITest
{
GenericMethod<T> someMethod;
}
public class TestA : ITest
{
public GenericMethod<string> someMethod
{
get
{
return stringMethod; //which is of type StringMethod(string str), defined above
}
}
}
public class TestB : ITest
{
public GenericMethod<byte> someMethod
{
get
{
return byteMethod; //which is of type ByteMethod(byte bt);, defined above
}
}
}
这可能吗?或者以这种方式切换代表是不可能的?
答案 0 :(得分:0)
如果不使接口通用,我认为这是不可能的。常见的实施方式是:
public interface ITest<T>
{
GenericMethod<T> someMethod;
}
或者,如果您想要实际使用非通用接口,请使用:
public interface ITest
{
GenericMethod<object> someMethod;
}
您还可以查看两个接口IEnumerable
和IEnumerable<T>
,了解如何组合通用接口和非通用接口。只需明确实现非泛型接口,以便在不关心具体类型时使用。
答案 1 :(得分:0)
public delegate void GenericMethod<T>(T arg);
public delegate void StringMethod(string str);
public delegate void ByteMethod(byte bt);
public interface ITest<T>
{
GenericMethod<T> someMethod { get; };
}
public class TestA : ITest<string>
{
public GenericMethod<string> someMethod
{
get
{
return stringMethod; //which is of type StringMethod(string str), defined above
}
}
}
public class TestB : ITest<byte>
{
public GenericMethod<byte> someMethod
{
get
{
return byteMethod; //which is of type ByteMethod(byte bt);, defined above
}
}
}
答案 2 :(得分:0)
由于继承原则,你不能这样做。在ITest中有效的所有应该在派生类/接口中工作。这意味着,如果我能够使用
GenericMethod<int> someMethod
在ITest中(看看int),我应该能够在TestA和TestB中使用它。您试图忽略此限制