类和结构都是创建对象的模板,每个对象都包含数据,并提供了处理和访问数据的方法,类定义类的每个对象(实例)可以包含什么数据和功能
类和机构的区别在于他们在内存中的存储方式/访问方式,类是存储在堆(heap)上的引用类型,结构是存储在栈(stack)上的值类型,并且结构不支持继承,从语法上来看结构与类非常相似,主要区别是结构使用关键字struct声明,而类使用class声明
类中的数据和函数称为类的成员,成员的可访问性可以是public/protected/internal protected/private/internal
数据成员:数据成员是包含类的数据,其中包括了字段/常量/事件成员(事件是类的成员,在发生某些行为时,可以让对象通知调用方,"事件处理程序"),数据成员可以是静态数据,类成员总是实例成员,除非使用static显式声明
函数成员:函数成员提供了操作类中数据的某些功能,包括方法/属性/构造函数/析构函数/运算符/索引器
[modifiers] return_type MethodName([parameters]){ }
方法传参:参数可以通过引用或者值传递给方法,在变量通过引用传递时,被调用方法得到的变量引用或者说指向内存中变量的指针,在方法内部对变量进行的任何修改在退出方法后仍然有效,而如果变量通过值传递给方法,被调用的方法得到的是变量的一个相同副本,也就是说在方法退出后,对变量进行的修改将会丢失;在C#中,除非特别指定,否则所有的引用类型都通过引用传递,所有的值类型都通过值传递;这里需要注意的是:字符串的方式有所不同,因为字符串的不可变性(如果改变字符串的值就会创建一个全新的字符串),所以字符串无法采用一般引用类型的行为方式,在方法调用中,对字符串所做的任何改变都不会影响原始字符串
只读字段:常量的概念是包含一个不可修改值的变量,但是某些场景下,我需要有常量的功能,但是值在运行前是未知的,C#为这种情形提供了只读字段;只读字段允许在构造函数中赋值,不能在其他地方赋值,只读字段可以是静态字段.与const常量不同的是,如果要把只读字段设置为静态,就必须显式声明
结构
如果只需要一个小的数据结构,最好使用结构,
如果类中只包含了静态的方法和属性,该类就是静态的,静态类作用于类本身,不需要创建类的实例即可调用
之前说到,所有的.Net类都派生自System.Object,如果在定义时没有指定基类编译器就会假定该类派生自Object,实际意义在于除了使用自己定义的方法和属性外,还可以访问Object类定义的许多公有的受保护的成员方法,比如ToString()/GetHashCode/Equals/ReferenceEquals/Finalize等
在没有类的源代码的情况下,可以使用扩展方法来对类进行扩展,扩展方法是静态方法.需要注意:尽管扩展方法是静态方法,也需要使用标准的实例方法调用.同时类中的实例方法优化级高于扩展方法(同名情况下)
语法:第一个参数是要扩展的类型,放在this关键字后
public static class DateExtension
{ public static string Format(this DateTime date, string format = "yyyy-MM-dd HH:mm:ss") { return date.ToString(format); } }
原文:https://www.cnblogs.com/GnailGnepGnaw/p/10601664.html