标签:调用 获取参数 垃圾回收器 关键字 操作符 name tle 默认值 值方法
封装的目的是隐藏细节。在必要的时候,细节仍然可以访问,但通过巧妙的封装细节,大的程序变得更容易理解,数据不会因为不慎而被修改,代码也变得更容易维护。
继承允许在这些相似但又不同的物体之间建立“属于”关系从而得到一个类层次结构。更具体的类型称为派生类型或者子类型,更常规的类型称为基类型或者超类型。
多态性意味着一个方法或类型可以具有多种形式的表现。在多态性的帮助下,不同的类型能自己照料一个方法的实现细节,因为共享同一个公共基类型(或接口)的多个派生类型也包含了相同的方法签名。
访问修饰符的作用是提供封装,标识所修饰成员的封装级别。
在类中存储数据的变量称为成员变量,更标注的为字段,它是与包容类型关联的具名存储单元,实例字段是在类的级别上声明的变量,用于存储与对象关联的数据。
class Employee
{
public string FirstName
{
get
{
return _FirstName;
}
set
{
_FirstName = value;
}
}
private string _FirstName;
}
依然可以使用简单的赋值操作符对属性进行赋值,属性的定义使用了三个上下文关键字:get,set
和value
。
public string Title{ get; set; }
public string Salary { get; set; } = "Not Enough";
构造器是“运行时”用来初始化对象实例的方法。
new操作符返回一个引用,它指向实例化好的对象。new操作符从内存管理器获取“空白”内存,调用指定的构造器,将对“空白”内存的引用作为隐式的this参数传给构造器。构造器链剩余的部分开始执行,在构造器之间传递引用。这些构造器都没有返回类型。构造器链上的执行结束后,new操作符返回内存引用。现在,该引用指向的内存处于初始化好的形式。
又在声明中又在构造器内部进行赋值的情况下,只要在声明时赋值发生之后,构造器内部的赋值才会发生,最终生效的是构造器内部的赋值,它会覆盖声明时的赋值。
没有显式定义的构造器,该构造器不获取参数,称为默认构造器。
class Program
{
static void Main()
{
Employee employee1 = new Employee("Inigo","Montoga")
{
Title = "Computer Nerd",
Salary = "Not enough"
};
}
}
class Program
{
static void Main()
{
List<Employee> employees = new List<Employee>()
{
new Employee("Inigo","Montoya"),
new Employee("Kevin","Bost")
};
}
}
终结器是在对象被判定“不可达”之后的不确定时间内执行,垃圾回收器会在一次垃圾回收过程中识别出带有终结器的对象。但不是立即回收这些对象,而是将它们添加到一个终结队列中。一个独立的线程遍历终结队列中的每一个对象,调用其终结器,然后将其从队列中删除,使其再次可供垃圾回收器处理。
可同时存在多个构造器,只要参数的数量和类型有区别。
在一个冒号后面添加this关键字,再添加被调用构造器的参数列表。
class Employee
{
public Employee(string firstName,string lastName)
{
FirstName = firstName;
LastName = lastName;
}
public Employee(int id,string firstName,string lastName):this(firstName,lastName)
{
Id = id;
}
public Employee(int id)
{
Id = id;
}
//...
}
它们是由编译器动态生成的数据类型,而不是通过显式的类定义来声明的。编译器遇到匿名类型的语法时,会自动生成一个CIL类,该类具有与匿名属性声明中的已经命名的值和数据类型对应的属性。该类型为静态类型,具有完全的可访问性。
虽然编译器支持匿名类型声明,但除非使用Lambda表达式和查询表达式关联来自不同类型的数据,或者对数据进行水平投射,否则一般情况下还是应该尽量避免使用这样的声明,甚至避免使用var来指定隐式类型的变量,除非需要频繁查询集合中的数据而使显式的类型声明成为负担,否则最好还是显式地声明类型。
为了定义能由多个实例共享的数据,需要使用static关键字。包含static修饰符的字段称为静态字段。
实例字段,也就是非静态字段,可以在声明的同时进行初始化。
未初始化的静态字段将获得默认值(0,null,false)等,即default(T)的结果。所以即使没有显式赋值的静态字段也可以被访问。
非静态字段针对它们从属的每个对象,都提供一个新的存储位置。
直接在类名之后访问静态方法,访问这种方法不需要有实例,所以this关键字在静态方法中无效。除此之外,要在静态方法内部直接访问实例字段或实例方法,必须先获得对字段或方法所从属于的那个特定的实例的引用。
用于对类进行初始化。静态构造器不支持显式调用,而是运行时在首次访问类时自动调用静态构造器,使用静态构造器将类中的静态数据初始化特定的值,尤其是无法通过声明的一次简单赋值来获得初始值的时候。
相较于公共静态字段来说,提供了一定程度的封装。
不包含任何实例字段,用static关键字修饰该类,防止该类被实例化,同时防止在类的内部声明任何实例字段或方法。
不能从静态类派生出其他类。
能模拟为不同的类创建实例方法只需更改静态方法的签名,使第一个参数成为要拓展的类型,并在类型名称前面附加this关键字。
public static void CopyTo(
this DirectoryInfo sourceDirectory, string target, SearchOption option, string searchPattern)
{
//...
}
假如一个类在它的包容类外部没有多大意义,就适合将其设计成嵌套类。
分部类是一个类的多个部分,这些部分可以合并成一个完整的类。
//File: Program1.cs
partial class Program
{
}
//File: Program2.cs
partial class Program
{
}
分部方法使生成的代码能调用并非一定要实现的方法。
标签:调用 获取参数 垃圾回收器 关键字 操作符 name tle 默认值 值方法
原文地址:https://www.cnblogs.com/zhang-mo/p/9834060.html