具有泛型构造函数的泛型类? [英] Generic class with generic constructor?

查看:196
本文介绍了具有泛型构造函数的泛型类?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个通用类。构造函数需要接受一个参数,该参数是同一个类的另一个实例。问题是另一个实例可能有不同的泛型类型。

看起来像C#允许我使用它自己的泛型类型的方法,但是这不会出现允许构造函数。

  public class MyClass< T> 
{
public MyClass< T2>(MyClass< T2> parent = null)
{
}

// ...其他东西

$ / code>

上面的代码告诉我 T2 未定义。它不接受它作为方法类型。



一种方法是将第二个泛型添加到我的类中。但这很尴尬,在许多情况下,参数将是 null ,并且没有类型。



任何人都可以看到一个简单的解决方法吗? 解决方案

你是对的。不支持通用构造函数。



您可以尝试以下操作:

创建一个较低级别的通用接口

  public interface IMyClass {
//...some常用的东西
IMyClass父类{get;组; }
}

并将其用作各种类型之间的常用链接

  public class MyClass< T> :IMyClass {
public MyClass(IMyClass parent = null){
Parent = parent;
}
public IMyClass Parent {get;组; }
// ...其他东西
}


I have a generic class. The constructor needs to accept an argument that is another instance of the same class. The problem is that the other instance can have a different generics type.

Looks like C# allows me to have a method with it's own generics type, but this doesn't appear allowed for the constructor.

public class MyClass<T>
{
    public MyClass<T2>(MyClass<T2> parent = null)
    {
    }

    // ... Additional stuff
}

The code above tells me T2 is undefined. It doesn't accept it as a method type.

One approach would be to add a second generic type to my class. But this is awkward and, in many cases, the argument will be null and there is not type.

Does anyone see a simple way around this?

解决方案

You are correct. Generic constructors aren't supported.

You could probably try the following:

Create a lower level common interface

public interface IMyClass {
    //...some common stuff
    IMyClass Parent { get; set; }
}

And use that as the common link between the types

public class MyClass<T> : IMyClass {
    public MyClass(IMyClass parent = null) {
        Parent = parent;
    }
    public IMyClass Parent { get; set; }    
    // ... Additional stuff
}

这篇关于具有泛型构造函数的泛型类?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆