如何在接口中使用泛型委托
本文关键字:泛型 接口 | 更新日期: 2023-09-27 18:10:03
我正在尝试创建一个持有通用委托的接口。然后,我希望实现接口的类决定实际的类型方法,或者最好甚至返回另一个委托。
下面的代码描述了我想要实现的目标。
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
}
}
}
这可能吗?或者以这种方式更换代表是不可能的?
我认为如果不使接口泛型,这是不可能的。常见的实现是:
public interface ITest<T>
{
GenericMethod<T> someMethod;
}
或者,如果你想要一个非泛型接口,使用:
public interface ITest
{
GenericMethod<object> someMethod;
}
您还可以查看两个接口IEnumerable
和IEnumerable<T>
,以了解如何组合泛型和非泛型接口。只需显式实现非泛型接口,以便在不关心具体类型时使用。
由于继承原则,您不能这样做。所有在ITest中工作的东西都应该在派生类/接口中工作。这意味着,如果我可以使用
GenericMethod<int> someMethod
(看int)在测试中,我应该能够在TestA和TestB中使用它。您正在尝试忽略此限制
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
}
}
}