在C#中创建通用方法

Ami*_*ail 4 c#

我有以下结构:

public enum MyTypes
{
    Type1 = 1, 
    Type2 = 2,
    Type3 = 3
}

public abstract class class1
{
   int id;
   string name;
   MyType type;
}

public class class2 : class1
{

}


public class class3 : class1
{

}

public class class4 : class1
{

}
Run Code Online (Sandbox Code Playgroud)

现在我要做的是创建一个泛型方法,我想给它类型对象说类3,它将从类3创建对象并定义它的变量并返回它以便能够将它添加到列表中class1的

像那样

private class1 myFunction (MyType t , int id , string name)
{
    T obj = new T();
    obj.type = t ;
    obj.id = id ;
    obj.name = name;
    return obj;
}
Run Code Online (Sandbox Code Playgroud)

如何创建这种通用方法?

请尽快帮助我

提前致谢

sta*_*ica 13

正如Danny Chen在他的回答中所说,你必须稍微修改你的类定义才能使它起作用,然后你可以做类似下面的事情:

public T myFunction<T>(int id, string name) where T : class1, new()
{
    T obj = new T();
    obj.id = id;
    obj.name = name;
    return obj;
}
Run Code Online (Sandbox Code Playgroud)

这个泛型方法需要T从中派生类型参数,class1并且还需要一个无参数构造函数 - 这就是它的where T : class1, new()意思.

由于idname属性是通过class1基类定义的,因此您可以将它们设置为myFunction通过其参数传递的内容.


还有一些需要注意的事项class1:

  • 考虑创建class1一个接口而不是一个抽象类,因为它不包含任何功能.
  • id,如果你真的想要能够访问它们name,type需要公开.
  • 通常,字段实际上不会公开public.考虑使用属性代替此目的.