Когда следует наследовать System.Type - PullRequest
4 голосов
/ 07 сентября 2011

Документация для Type.GetTypeCode состояния:

Примечания

Когда вы наследуете от Тип Вы можете изменить поведение этого метода, переопределив метод GetTypeCodeImpl .

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

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

Поскольку нет способа переопределить typeof, я предполагаю, что оператор typeof по-прежнему возвращает экземпляр внутреннего класса System.RuntimeType из сборки mscorlib,или похожие.Какая польза будет от класса, производного от пользователя?

Ответы [ 2 ]

4 голосов
/ 07 сентября 2011

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

Я подозреваю, что должна делать документация сказал, что "классы, происходящие от System.Type, изменяют поведение этого метода, переопределяя GetTypeCodeImpl" - хотя, честно говоря, даже это то, что пользователи на самом деле не должны знать.

0 голосов
/ 10 марта 2015

В моем случае я хотел создать экземпляры и классы, которые я бы создал на лету во время выполнения (из источника данных, например, XML).Я успешно подклассифицировал System.Type, но это было бесполезно: вы не можете создавать экземпляры, используя Activator.CreateInstance (yourSubType).

Я справился с проблемой, преобразовав исходный код (XML) в скомпилированный код c #, а затем скомпилировалэто с помощью CSharpCodeProvider.

...