一个方法多个接口返回类型

本文关键字:接口 方法 返回类型 一个 | 更新日期: 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()

相关文章: