第三章:C#中的组件
1、类(class):用于创建对象的数据结构;用于定义对象中包含的数据,但其本身并不包含任何数据
①、对象:类的实例;包含数据以及与数据相关的方法
②、成员(members):与类相关的数据和方法
2、声明类:关键词class
<修饰符>类<类名称>
①、修饰符规定了类的存取信息,定义了类的作用域
new:和嵌套类一起使用,用于隐藏和基类名称相同的继承类
public:可以从任何程序代码中存取的类
private:从包含类型中存取的类,private修饰符通常和包含static方法的类一起使用
protected:从包含类型或从包含类型的导出类型中存取的类
internal:可以从当前部件(部件也可以叫程序集)中存取的类
sealed:防止从基类导出其他类
abstract:定义其他类的基类;抽象类没有实例,支持继承;不能用sealed
3、继承(inheritance):从现有类导出新类;允许导出类重用类的数据和方法;不能隐式继承基类的构造函数和析构函数;单继承(single inheritance),多派生
class<导出类(派生类)>:<基类>
4、构造函数(constructor):在从类实例化对象的时候调用的默认方法;每个类都有一个构造函数,其名称与类名相同,无返回值
①、修饰符:public、 private、 protected、 internal
public class Employee
{
public Employee()
{
String Name=”Me”
}
public Employee(string EmployeeName)
{
Name= EmployeeName;
}
}
②、在创建实例时,初始化实例是非常重要的,但是在类实例超出作用域时,破坏实例也是非常重要的,因此,有了析构函数
5、析构函数(destructors):与构造函数相似,只是有“~”符号在前面
public class Employee
{
~Employee()
{
String Name=”Me”
}
}
①、不能显示的调用析构函数,当程序不再使用实例时将自动调用
6、在释放资源之后清理内存的方法:
①、Finalize()方法:在不需要的时候释放数据成员所占用的资源,在垃圾搜集系统废弃对象之前清理内存,当调用类的析构函数式将自动调用该方法,因此程序员不能调用该方法
该方法无返回值,无参数传递,不可覆盖,需等待会阻碍内存
②、Dispose()方法和Close()方法:删除类实例之后,立即释放资源,要明确调用
7、方法(method):代码的逻辑片段,可以执行特定的操作
①、声明方法:
<修饰符><返回类型><方法名称>(参数1,参数2,…)
{
语句
}
②、调用方法:
对象1.方法1(参数1,参数2,…);
③、向方法传递参数
值参数(value parameters):按值向方法传递的参数
引用参数(reference parameters):按引用传递的变量值,关键字ref
对象1.方法1(参数1,ref 参数2,…);
*$参数1改动不会改变parameters的原始值,参数2改动会影响它的原始值,因为参数2是引用传值
输出参数(output parameters):通常用关键字out
对象1.方法1(out 参数1);
*$在这里,作为输出参数将对象1传给方法1,可以不初始化就将它传给方法
参数数组(parameter array):只能传递一维数组,关键字params
对象1.方法1(参数1,params 数组类型[] 参数2);
*$数组参数只能排在参数列表的最后面且不能与引用参数、输出参数一起使用
错误写法:对象1.方法1(params 数组类型[]参数1, ref参数2);
④、方法修饰符:
static:类的任何特定实例都不能调用,调用需指定方法容器类的名称
new:当尝试隐藏与导出类方法名称相同的基类方法时,可以抑制编译器的警告
public:与类的public相似
private:声明为private方法是声明它的类所私有的。不能从包含private方法的类之外调用private方法
protected:与类的protected相似
internal:与类的internal相似
extern:无限制作用域,甚至可以在不同语言中调用extern声明的方法
virtual:虚方法,包含它的基类的派生类可以覆写它,不能与static、override和abstract一起使用
abstract:是特殊类型的virtual方法,里面不包含实现它方法
override:用于覆写abstract和virtual方法
sealed:和override一起使用,以覆盖virtual方法,而它所在类的派生类不能覆写这个方法
8、方法重载(method overloading):相同的方法名称,不同的参数类型,不同的参数个数
①、定义重载方法:
public int Add(int x,int y)
{
int z=x+y;
return z;
}
public string Add(string string1,string string2)
{
string string3=string1+string2;
return string3;
}
②、调用重载方法:
Object1.Add(45,25);
③、默认参数:C#不支持默认参数,解决方法就是方法重载
public int Add(int x)
{
int z=x+100;
return z;
}
9、命名空间(namespaces):是容器,可以在逻辑上将功能相关的相似类分组到一起,也可以使用命名可见分组类似的数据类型
①、声明命名空间
namespaces Employee
{
class Employee
}
②、可以嵌套命名空间
namespaces Employee
{
namespaces Salary
{
class Salary
}
}
引用Salary类需用Employee.Salary.Salary
③、访问命名空间:
using Employee
using Employee.Salary
④、别名: using <别名>=<类>
Using aliasSalary=Employee.Salary
10、结构:是一种数据结构,包含析构函数、常量、变量、方法、索引、特性、运算符和嵌套类型
①、 结构是值类型,类是引用类型,因此结构不需要分配堆,只是存储在内存堆栈中;声明为结构类型的变量直接包含数据,而类变量仅仅包含对数据的引用;结构不支持继承;用于对相似数据分组
<修饰符> struct <结构名称>
{}
修饰符:new public private protected internal
不能使用abstract sealed
②、 一个结构复制到另一个结构:创建结构用于存储少量数据是可行的
定义
public struct Employee
{
public in Empid;
public string Empname;
public string Empemail;
public string Empsalary;
}
实现
Employee Emp1;
Employee Emp2;
Emp1=new Employee();
Emp1.Empname=”ss”;
Emp1.Empemail=ganqiyin2009@163.com;
Emp1.Empsalary=$1000;
复制
Emp2=Emp1;
11、枚举(enumeration):是一种数据结构,以易于理解的名称来存储数据
<修饰符>enum<枚举名称>
修饰符:new public private protected internal
不能使用abstract sealed
12、接口(interface):用于声明一组方法的组件;对相关方法、特性、事件和索引进行分组;仅包含方法声明;所有接口都是public
interface <接口名称>
interface Employee
{}
interface Salary
{}
interface Salary: Employee//接口也可以继承
{}
class Employee:Employee,Salary
{}
13、编写、编译和执行C#程序