类与结构的区别是它们在内存中的存储方式、访问方式(相似存储在堆上的引用类型,而结构是存储在栈上的值类型)和它们的一些特征。html
语法上,类与结构很是类似,主要区别是结构使用关键字 struct 代替 class 来声明。编程
3.3.1 数据成员函数
数据成员是包含类数据—字段、常量和事件的成员。布局
3.3.2 函数成员post
函数成员提供了操做类中数据的某些功能,包括方法、属性、构造函数和析构函数(终结器)、运算符以及索引器。性能
ref 和 out 的区别:this
ref 在传递以前必须已经被初始化,out 则不要求。url
ref 的实质是将值类型进行引用传递,而 out 是为了增长返回值。spa
命名参数:在传递参数的过程当中能够指定其名字,格式为 MethodName (ParameterName : Value )code
Params 关键字 : 必须在方法参数的最后面。
方法的重载:不能仅在返回类型上有区别,不能仅根据声明 ref 、 out 或 params 之间区分。
概念:属性是一个或一对方法,在客户端代码看来,它(们)是一个字段。
get访问器不带任何参数,且返回属性声明的类型。
set访问器带一个value参数,其类型与声明的类型相同。
属性的访问修饰符:在get和set访问器中,必须有一个具有属性的访问级别。
声明构造方式就是声明一个与包含的类同名的方法,但该方法没有返回值。
若是提供了带参数的构造函数,编译器就不会自动提供默认的构造函数。
(1)静态构造函数
编写静态构造函数的缘由:类中有一些静态字段或属性,须要在第一次使用类以前,从外部源中初始化这些字段和属性。
.NET运行库没有确保何时去执行静态构造函数,因此不该该要求在某个特定时刻执行静态构造函数中的代码。但能够确保的是,它在全部引用前只会调用一次。
无参构造函数能够与静态构造函数在同一个类中定义。
(2)从构造函数中调用其它构造函数
base 与 this 关键字
3.3.3 只读字段
readonly 与 const 的区别:
readonly 能够在构造函数中赋值,而 const 哪里都不能赋值,只能初始化。
var 和 new 关键字一块儿使用能够建立匿名类型,例如。
1 static void Main(string[] args) 2 3 4 { 5 6 7 var test = new { Name = "Earl Jones", Age = 17 }; 8 9 10 Console.WriteLine(test.ToString()); 11 12 13 Console.WriteLine(test.Name.GetType().ToString()); 14 15 16 Console.WriteLine(test.Age.GetType().ToString()); 17 18 19 Console.ReadKey(); 20 21 22 }
输出结果以下:
咱们并不知道这个对象的类型,编译器为其“伪造”了一个名称,可是只有编译器才能使用它,咱们不能也不该该使用新对象上的任何类型反射,由于这不会获得一致的结果。
1 MyStruct myStruct /*= new MyStruct()*/; 2 myStruct.Name = "Earl Jones"; 3 myStruct.Age = 17;
覆盖结构默认的构造函数会报错:
在代码中实例化一个类或结构时,只要有代码引用它,就会造成强引用。
强引用和弱引用的区别是,强引用只要有引用就不会被GC回收,而弱引用随时均可能被GC回收,因此使用它的时候必须肯定其是否存活。如:
1 MyClass myClass; 2 WeakReference weakMyClass = new WeakReference(new MyClass());
3 if (weakMyClass.IsAlive) 4 { 5 myClass = weakMyClass.Target as MyClass; 6 Console.WriteLine(myClass.value); 7 }
Partial关键字能够容许把类、结构、方法或结构放在多个文件中。
若是声明相似使用了下面的关键字,这些关键字就必须应用于同一个类的全部部分:
全部类都继承自System.Object类。
方法:
扩展方法用于在某些不能直接修改源代码中的类中添加方法。
1 using System; 2 3 namespace 扩展方法 4 { 5 class Program 6 { 7 static void Main(string[] args) 8 { 9 MyClass myClass1 = new MyClass(); 10 myClass1.SayHiToSomeone(); 11 myClass1.SayHi(); 12 Console.ReadKey(); 13 } 14 } 15 16 class MyClass 17 { 18 public void SayHi() 19 { 20 Console.WriteLine("我是最原始的方法"); 21 } 22 } 23 24 static class AddMyClass 25 { 26 static public void SayHiToSomeone(this MyClass myClass) 27 { 28 Console.WriteLine("我是一个扩展方法"); 29 } 30 31 static public void SayHi(this MyClass myClass) 32 { 33 Console.WriteLine("我是扩展方法SayHi"); 34 } 35 } 36 }
输出的结果:
由上得出:
本文部分摘录自C#高级编程第九版,其他由Earl Jones整理及总结而成,本人能力有限,若有纰漏望及时指出。
若是你喜欢此书,或想了解更详细内容,请购买正版书籍进行查阅。
转载请注明出处。