2015-11-10 3 views
2

Я пытаюсь определить новый тип через Reflection.Emit, но мне не удается найти TypeAttribute, который определит тип как static.TypeAttribute для статических классов

Например, скажем, я хочу создать следующий тип:

public static class Hello 
{ 
} 

можно определить следующие атрибуты:

TypeAttributes.Class 
TypeAttributes.Public 

Но как же это отличается от

public class Hello 
{ 
} 

Я думал, может быть, добавить TypeAttributes.Abstract (потому что он не может создать экземпляр), но Я не был уверен в этом, поскольку абстрактные классы совершенно разные.

+0

из любопытства, почему вы хотите? Какое возможное влияние на декорирование класса как статического для динамически сгенерированного типа? –

+0

@KirkWoll Во время компиляции нет. Однако во время выполнения я ожидаю, что приложение будет генерировать исключение, когда я хочу, например, создать экземпляр этого конкретного типа. –

+0

Хм, ну, когда вы пытаетесь создать статический класс с помощью 'Activator', он действительно выдает ошибку,« MissingMethodException: не может создать абстрактный класс ». –

ответ

3

Вы можете использовать отражение, чтобы посмотреть, что компилятор C# будет генерировать в каждом случае.

public class Program 
{ 
    public static void Main() 
    { 
     Console.WriteLine(typeof(StaticClass).Attributes); 
     Console.WriteLine(typeof(NotStaticClass).Attributes); 
    } 
} 

public static class StaticClass { } 

public class NotStaticClass { } 

будет производить:

AutoLayout, AnsiClass, Class, Public, Abstract, Sealed, BeforeFieldInit

AutoLayout, AnsiClass, Class, Public, BeforeFieldInit

+0

Спасибо! Было бы неплохо, если бы они добавили атрибут типа Static. Если я начну создавать методы экземпляра для своего нового типа, приложение не будет жаловаться, чего я не ожидаю. С помощью 'TypeAttribute.Static'' TypeBuilder' должен вызывать ошибку при попытке создать этот новый тип. –

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