C# 通过构造函数传递泛型参数
我有两个类,companys和Contacts,我需要通过表单的构造函数传递其中一个类的实例C# 通过构造函数传递泛型参数,c#,.net,object,generics,parameters,C#,.net,Object,Generics,Parameters,我有两个类,companys和Contacts,我需要通过表单的构造函数传递其中一个类的实例 private Address _address; private Object _genericObject; public frmAddressAddModify(Address address = null, Object genericObject = null) { InitializeComponent();
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的属性和方法,它可以是公司或联系人,这取决于我传递的内容
顺便说一句,我使用的财产位于公司和联系人中,地址相同。101:
让两个类都实现一个接口,并将该接口的实例传递到类中
interface IHaveAddress // Please find a better name for this
{
Address Address {get;}
}
class Companies : IHaveAddress
{
public Address Address {get;}
// other staff goes here
}
class Contacts: IHaveAddress
{
public Address Address {get;}
// other staff goes here
}
在表单的构造函数中:
public frmAddressAddModify(IHaveAddress haveAddress)
{
// code here...
}
在c语言中不能有泛型构造函数,我想这就是你的目标。为什么此对象可以是公司或联系人?他们之间有联系,对吗?也许它们可以实现相同的接口。你注入了这个接口。这是一个解决方法。这看起来像是接口的经典用例。如果Company和Contact-是genericObject的子对象,则将这些实例视为genericObject类。frmAddressAddModify本身的类型是什么?是表格吗?否则,您可以将其本身变成泛型类型并获得所有好处。。。您正在寻找基于泛型的解决方案吗?您使用泛型这个词的方式模棱两可。如果您的意思是一个未知类型的对象,那么您可以使用公司和合同类型共有的公共基类型作为参数类型。如果您的意思是想要一个泛型方法,那么您必须给该方法一个泛型类型参数,使该参数成为该类型,并再次将该类型约束为公共基类型。如果这两种类型不共享一个公共基类型,则必须在方法中显式强制转换。在任何情况下,重复的问题以及其他许多相同的问题都说明了这一点。这并不完全准确-这是有效的c:class X{public XT value=>value=value;public T value{get;}}啊,你是对的。很酷的东西: