How to pass a Class as parameter for a method? [du

2020-02-12 07:02发布

问题:

I have two classs:

Class Gold;
Class Functions;

There is a method ClassGet in class Functions, which has 2 parameters. I want to send the class Gold as parameter for one of my methods in class Functions. How is it possible?

For example:

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

Attention: I want to send MyClassName as string parameter to my method.

回答1:

The function you're trying to implement already exists (a bit different)

Look at the Activator class: http://msdn.microsoft.com/en-us/library/system.activator.aspx

example:

object instance = Activator.Create(className);

Or like this:

Type type = typeof(MyClass);

MyClass instance = (MyClass)Activator.Create(type);

or in your case:

public void ClassGet(string MyClassName,string blabla)
{
    object instance = Activator.Create(MyClassName);
}

// Call it like:

Gold g = new Gold();
g.ClassGet("MyClass", "blabla");


回答2:

Are you looking for type parameters?

Example:

    public void ClassGet<T>(string blabla) where T : new()
    {
        var myClass = new T();
        //Do something with blablah
    }


回答3:

You could send it as a parameter of the type Type, but then you would need to use reflection to create an instance of it. You can use a generic parameter instead:

public void ClassGet<MyClassName>(string blabla) where MyClassName : new() {
  MyClassName NewInstance = new MyClassName();
}


回答4:

 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

            }

        }