Как я могу передать тип, а не экземпляр функции в C #? - PullRequest
0 голосов
/ 26 февраля 2011

Я пытаюсь использовать рефлексию для перечисления полей и методов класса, чтобы выполнить некоторую автоматизацию в веб-приложении.Я также абстрагирую это, чтобы я мог передать любой класс.

Есть ли способ, которым я мог бы каким-то образом передать тип непосредственно функции для перечисления, а не экземпляру типа?

Я бы хотел, чтобы сторона вызывающего абонента выглядела следующим образом:

var m = new MyClass(AClassOfSomeTypeIDefined);

Я бы хотел избежать создания экземпляра, поскольку он вводит в заблуждение любого, кто может использовать этот класс (поскольку экземпляр не используется напрямую).

Ответы [ 3 ]

3 голосов
/ 26 февраля 2011
using System;

public void UseType(Type t) {
    // do something with t using reflection techniques - e.g.
    Console.WriteLine("compat with int? {0}", typeof(int).IsAssignableFrom(t));
}

Назовите его с ключевым словом C # typeof и типом данных, который вы хотите передать.

// Examples...
UseType( typeof(int) );
UseType( typeof(System.Int32) );
UseType( typeof(System.Windows.Controls.Button) );
UseType( typeof(IDisposable) );
UseType( typeof(WhateverTypeYouWant) );

System.Type является одним из краеугольных камней отражения, так как выуже знаю, так что беги с этим.


Другие примечания
В зависимости от того, что вы хотите сделать с типом, могут быть полезны следующие периферийные детали.

Чтобы создать экземплярType во время выполнения без использования ключевого слова new во время компиляции, используйте класс System.Activator.например,

// Create a List of strings like: new List<string>();
var list = (List<string>) Activator.CreateInstance( typeof(List<string>) );
1 голос
/ 26 февраля 2011

Вы можете передать объект Type, как и любой другой параметр.

class MyClass
{
    public MyClass(Type yourType)
    {
        // do as you please with yourType
    }
}

Вызов его:

var m = new MyClass(typeof(YourType));
1 голос
/ 26 февраля 2011

да просто используйте Type вашего класса. Есть два основных способа получить тип:

Foo foo = new Foo();
Type myType = foo.GetType();
Type myTyp2 = typeof(Foo);

Вы можете использовать GetType(), если вы знаете тип только во время выполнения (более часто встречается при отражении), или typeof(), если вы уже знаете тип во время компиляции.

В вашем примере это будет то есть

var m = new MyClass(typeof(Foo));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...