c# – 如何限制泛型函数只接受某种类型的类
发布时间:2020-12-15 23:28:48 所属栏目:百科 来源:网络整理
导读:我正在尝试执行以下操作: public class A{}public class B{} 在项目的某个地方我想要这个: public class C{ public T funcT(T obj) [where T can be either of class A or class B] { obj.x = 100; return obj; }} 我一直在努力: public T funcT(T obj) w
我正在尝试执行以下操作:
public class A { } public class B { } 在项目的某个地方我想要这个: public class C { public T func<T>(T obj) [where T can be either of class A or class B] { obj.x = 100; return obj; } } 我一直在努力: public T func<T>(T obj) where T: A,B 但这给了我:
有人可以解释我如何使func只接受A类或B类? 解决方法
正如在问题中所描述的那样,这项工作可以通过重载解析来更好地处理:
public class C { public A func(A obj) { obj.x = 100; return obj; } public B func(B obj) { obj.x = 100; return obj; } } 但我知道A和B可能是任何类型的占位符,并且所有这些都可能变得乏味.在这种情况下,您需要一个由您的每个类支持的通用接口: interface IBase { int x; } public class C { public IBase func(IBase obj) { obj.x = 100; return obj; } } 请注意,此时我们仍然不需要泛型.此外,您可能需要支持许多类型,这些类型在通用接口下不能完全组合在一起.在这种情况下,仍然构建接口并尽可能多地使用该接口.如果需要,为更多类型构建另一个接口……依此类推……然后在接口和特定类型之间,您可以处理具有重载决策的事物. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |