@this

@ 可以作为标识符(类名、变量名、方法名等)的第一个字符,以允许C# 中保留关键字作为自己定义的标识符。

CallerMemberName

在.Net 4.5中引入了三个Attribute:CallerMemberName、CallerFilePath和CallerLineNumber 。在编译器的配合下,分别可以获取到调用函数(准确讲应该是成员)名称,调用文件及调用行号。函数定义时,参数必须设置为可选参数,在函数调用时,如果缺失该参数,则有编译器自动添加对应的属性值,如果设置了参数,则使用调用时传过来的参数。

public void WriteError(object message,
[CallerMemberName] string memberName = "",
[CallerFilePath] string sourceFilePath = "",
[CallerLineNumber] int sourceLineNumber = 0)
{
    _log4Net.ErrorFormat("文件:{0} 行号:{1} 方法名:{2},消息:{3}", sourceFilePath, sourceLineNumber, memberName, message);
}

ctor 构造函数

当没有显示定义构造函数时,会自动生成一个构造函数,它没有参数,没有返回值。当C#的类被编译后,在IL代码中会出现一个名为.ctor的方法,它就是我们的构造函数,对应C#中的构造函数。

typeof() 和 GetType()区别

总得来说他们都是为了获取某个实例具体引用的数据类型System.Type。typeof 是运算符,而 GetType() 是方法。

  1. typeof 获得类型的System.Type对象,GetType()获得当前实例的Type。
  2. GetType()是基类System.Object的方法,只有建立了一个实例之后才能够被调用。
  3. typeof的参数只能是int, string, class,自定义类型,不能为具体实例,否则编译器会报错。