У меня интересная проблема. Мне нужно динамически обернуть статические классы. То есть вернуть не статический экземпляр моим вызывающим. e.g.:
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); }
Спасибо всем.