Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过构造函数传递泛型参数_C#_.net_Object_Generics_Parameters - Fatal编程技术网

C# 通过构造函数传递泛型参数

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();

我有两个类,companys和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的属性和方法,它可以是公司或联系人,这取决于我传递的内容

顺便说一句,我使用的财产位于公司和联系人中,地址相同。

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;}}啊,你是对的。很酷的东西: