そして、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);
}
}
}