10

我有两个班级:

Class Gold;
Class Functions;

ClassGet类中有一个方法Functions,它有两个参数。我想将类Gold作为我在类中的一种方法的参数发送Functions。这怎么可能?

例如:

public void ClassGet(class MyClassName, string blabla)
{
    MyClassName NewInstance = new MyClassName();
}

注意:我想MyClassName作为字符串参数发送给我的方法。

4

4 回答 4

16

您在寻找类型参数吗?

例子:

    public void ClassGet<T>(string blabla) where T : new()
    {
        var myClass = new T();
        //Do something with blablah
    }
于 2013-09-14T21:34:27.803 回答
15

您尝试实现的功能已经存在(有点不同)

查看 Activator 类:http: //msdn.microsoft.com/en-us/library/system.activator.aspx

例子:

private static object CreateByTypeName(string typeName)
{
    // scan for the class type
    var type = (from assembly in AppDomain.CurrentDomain.GetAssemblies()
                from t in assembly.GetTypes()
                where t.Name == typeName  // you could use the t.FullName as well
                select t).FirstOrDefault();

    if (type == null)
        throw new InvalidOperationException("Type not found");

    return Activator.CreateInstance(type);
}

用法:

var myClassInstance = CreateByTypeName("MyClass");
于 2013-09-14T21:33:44.267 回答
6

您可以将其作为 type 的参数发送Type,但随后您需要使用反射来创建它的实例。您可以改用泛型参数:

public void ClassGet<MyClassName>(string blabla) where MyClassName : new() {
  MyClassName NewInstance = new MyClassName();
}
于 2013-09-14T21:34:26.337 回答
-2
 public void ClassGet(string Class, List<string> Methodlist)
        {
            Type ClassType;
            switch (Class)
            {
                case "Gold":
                    ClassType = typeof(Gold); break;//Declare the type by Class name string
                case "Coin":
                    ClassType = typeof(Coin); break;
                default:
                    ClassType = null;
                    break;
            }
            if (ClassType != null)
            {
                object Instance = Activator.CreateInstance(ClassType); //Create instance from the type

            }

        }
于 2013-09-14T22:30:15.437 回答