У меня есть интересная проблема. Мне нужно динамически переносить статические классы. То есть верните нестатический экземпляр моим абонентам. например:.
public object CreateInstance(string className) {
Type t = assembly.GetType(className);
if (IsStatic(t)) {
return CreateStaticWrapper(t);
} else {
return Activator.CreateInstance(t);
}
}
Так что мне нужны указатели на то, как реализовать CreateStaticWrapper
.
Примечание. К сожалению, я не могу использовать динамические объекты.
Итак, каковы мои варианты? Я не так увлечен изучением поколения IL? Если генерация IL (Reflection.Emit или есть другие способы сейчас?) - это способ пойти, у кого есть указатели?
Изменить: важно отметить, что я могу вернуть словарь делегатов. Поэтому я мог бы использовать Delegate.CreateDelegate
для этого, но я не могу понять, как обрабатывать перегруженные методы и общие методы.
Edit2: Другой вариант заключается в том, чтобы ввести пустой конструктор в тип с использованием Emit, снова с любыми указателями? Возможно ли это на типе, обозначенном как статическое? Ставит ли ключевое слово static в IL?
Edit3: Для небольшого контекста я передаю это в среду javascript: мой проект. Поэтому я хотел бы иметь возможность (в JavaScript):
var fileHelper = .create('System.IO.File');
if (fileHelper.Exists(fileName)) { fileHelper.Delete(fileName); }
Спасибо всем.