【发布时间】:2020-10-05 18:00:45
【问题描述】:
我有两个类,Companies 和 Contacts,我需要通过表单的构造函数传递其中一个类的实例。
private Address _address;
private Object _genericObject;
public frmAddressAddModify(Address address = null, Object genericObject = null)
{
InitializeComponent();
if (address != null)
{
_address = address;
}
if (genericObject != null)
{
_genericObject = genericObject;
}
}
但是,我需要能够使用 genericObject 的属性和方法,这可能是公司或联系人,具体取决于我传递的内容。
顺便说一句,我正在使用的属性在公司和联系人中的同名(地址)下。
【问题讨论】:
-
这看起来像是接口的经典用例。 docs.microsoft.com/en-us/dotnet/csharp/language-reference/…
-
如果 Company 和 Contact - 是 genericObject 的子类,则将这些实例视为 genericObject 类。
-
frmAddressAddModify本身的类型是什么?是Form吗?否则,您可以将其本身设为泛型类型并获得所有好处。 -
问题中没有generics...您在寻找基于泛型的解决方案吗?
-
您在使用“通用”这个词时模棱两可。如果您的意思是“未知类型的对象”,那么您可以使用
Company和Contract类型共有的公共基本类型作为参数类型。如果您实际上的意思是您想要一个泛型方法,那么您必须为该方法提供一个泛型类型参数,使该参数具有该类型,并将该类型(再次)约束为公共基类型。如果这两种类型不共享一个共同的基类型,那么您必须在方法中显式地强制转换。无论如何,重复的问题以及许多其他相同的问题显示了如何。
标签: c# .net object generics parameters