2014-01-21 2 views
4

В C# .NET. Как я могу создать новый класс исключений и выбросить его в Runtime. Мне нужно создать имя класса исключения во время выполнения на основе строки, которую я получаю в качестве ввода. Кажется, я должен использовать Reflection.emit, но я не знаю, как это сделать.Как создать новый класс исключения и выбросить его

+10

Вам нужно будет предоставить нам больше контекста. Если честно, это звучит неплохо, какую проблему вы пытаетесь решить? –

+4

Если вы генерируете тип исключения во время выполнения, как вы ожидаете, что кто-то сможет его поймать? Если они не поймают один из базовых типов исключений, в этом случае, какой будет ваш класс исключения? – Lukazoid

+0

@ Lukazoid Я согласен, что кажется немного «непригодным для использования», но вопрос, кажется, интересует меня, чтобы решить. – cubitouch

ответ

3

Хотя я не понимаю, цель создания типа исключения с использованием отражение, создание типа исключения не отличается от создания любого другого типа:

// Build an assembly ... 
var appDomain = Thread.GetDomain(); 
var assemblyName = new AssemblyName("MyAssembly"); 
var assemblyBuilder = appDomain.DefineDynamicAssembly(
    assemblyName, 
    AssemblyBuilderAccess.Run 
); 

// ... with a module ... 
var moduleBuilder = assemblyBuilder.DefineDynamicModule("MyModule"); 

// ... containing a class. 
var typeBuilder = moduleBuilder.DefineType(
    "MyException", 
    TypeAttributes.Class,  // A class ... 
    typeof(Exception)   // ... deriving from Exception 
); 
var exceptionType = typeBuilder.CreateType(); 

// Create and throw exception. 
var exception = (Exception) Activator.CreateInstance(exceptionType); 
throw exception; 
0

Я думаю, вы можете посмотреть в этой статье, за исключением: http://blog.gurock.com/articles/creating-custom-exceptions-in-dotnet/

И к этой теме, чтобы решить проблему определения во время выполнения: Creating a class for an interface at runtime, in C#

+0

Ответы должны содержать не только ссылки, они должны содержать необходимую информацию самостоятельно. – svick

Смежные вопросы