0
我正在经历Getting Started(与PostSharp)无效编译器生成的.NET类名称
当我看到PostSharp注射(被这个表达式是正确?)的一方面的代码到组件中,
我看到这个名字古怪班级标有CompilerGeneratedAttribute
。
它被命名为<>AspectsImplementationDetails_1
。
据我所知,班级名称不能以<>
开头。
但是PostSharp如何创建这样的类呢?
是<>
某种未知/内部运算符?
[更新] 我做了一些测试,它看起来像我是能够生成类型的有趣的名字。
这里是使用
using System;
using System.Reflection;
using System.Reflection.Emit;
namespace ReflectionDemo
{
class Program
{
public static void Main(string[] args)
{
var typeNames = new[]
{
"<>", "-", "+", "~", "!", "@", "#", "$", "%", "^", "&",
"*", "(", ")", "="
};
const string assemblyName = "Test";
foreach (var typeName in typeNames)
{
PrintTypeName(
BuildType(assemblyName, typeName).CreateType());
}
}
private static void PrintTypeName(Type type)
{
Console.WriteLine("TypeName = '{0}'", type.FullName);
}
private static TypeBuilder BuildType(
string assemblyName, string typeName)
{
var name = new AssemblyName(assemblyName);
var assemblyBuilder =
AppDomain.CurrentDomain.DefineDynamicAssembly(
name, AssemblyBuilderAccess.Run);
var moduleBuilder =
assemblyBuilder.DefineDynamicModule(name.Name, false);
return moduleBuilder.DefineType(
typeName, TypeAttributes.Public);
}
}
}
+1,但我认为你的意思是IL,而不是CLR。编译器为匿名类创建''''''。 – 2009-10-19 01:42:51
@itowson:我将利用这个机会创建一个滥用动态类型名称。 ;) – Sung 2009-10-19 02:54:53