一个方法多个接口返回类型
本文关键字:接口 方法 返回类型 一个 | 更新日期: 2023-09-27 18:16:39
假设我有
public class ClassA : Ione, Itwo
public class ClassB : Ione, Itwo
public class ClassC : Ione, Itwo
和一个方法MethodA,该方法返回ClassA、ClassB或ClassC的实例。方法返回类型为Ione或two
我怎样才能做到呢?
我试过这样使用泛型:
public T MethodA<T>(myEnum e) where T : Ione, Itwo
但是当输入return (T)new ClassA();
时,我得到错误"不能将类型ClassA转换为T"。
谢谢。
统一两个接口:
interface ITogether : Ione, Itwo { }
并使用它作为返回类型。
你可能需要你的类一起实现,而不是Ione和ittwo,但你应该尝试两种方法。
你可以定义一个继承自Ione
, Itwo
的新接口IThree
-然后在你的具体类中实现该接口:
public interface IThree : Ione, Itwo { }
然后使用这个作为返回类型:
public IThree MethodA<T>(myEnum e) where T : IThree
{
return new ClassA();
}
要使此方法泛型,可以添加new()
约束并返回所需的类型
public static T MethodOfType<T>() where T : IThree, new()
{
return new T();
}
首先将ClassA转换为对象
public T MethodA<T>() where T : Ione, Itwo
{
return (T)(object)new ClassA();
}
应该可以工作,但是会抛出运行时异常。你可能想要的是像
这样的东西public T MethodA<T>() where T : Ione, Itwo
{
return (T)(object)Activator.CreateInstance(typeof(T));
}
还要注意,如果T没有空构造函数,这仍然会导致异常。您可以为此添加一个编译时检查,方法是将声明更新到T: Ione, Itwo, new()