C#接口(十三)
接口概述接口是指定一组函数成员而不实现它们的引用类型。所以只能类和结构来实现接口。 12345678910111213141516171819202122232425262728293031323334353637383940414243//声明接口interface IInfo{ string GetName(); string GetAge();}//声明实现接口的CA类class CA : IInfo{ public string Name; public int Age; //在CA类中实现两个接口方法 public string GetName() { return Name; } public string GetAge() { return Age.ToString(); }}//声明实现接口的CB类class CB : IInfo{ public string First; public string Last; p...
C#事件(十二)
发布者和订阅者很多程序都有一个共同的需求,即当一个特定的程序事件发生时,程序的其他部分可以得到该事件已经发生的通知。发布者/订阅者模式(publisher/subscriber pattern)可以满足这种需求。在这种模式中,发布者类定义了一系列程序的其他部分可能感兴趣的事件。其他类可以 “注册”,以便在这些事件发生时收到发布者的通知。这些订阅者类通过向发布者提供一个方法来 “注册” 以获取通知。当事件发生时,发布者 “触发事件”,然后执行订阅者提交的所有事件。 由订阅者提供的方法称为回调方法,因为发布者通过执行这些方法来 “往回调用订阅者的方法”。还可以将它们称为事件处理程序,因为它们是为处理事件而调用的代码。 发布者(publisher):发布某个事件的类或结构,其他类可以在该事件发生时得到通知。 订阅者(subscriber):注册并在事件发生时得到通知的类或结构。 事件处理程序(event handler):由订阅者注册到事件的方法,在发布者触发事件时执行。事件处理程序方法可以定义在事件所在的类或结构中,也可以定义在不同的类或结构中。 触发(rais...
C#委托(十一)
委托概述委托和类一样,是一种用户定义类型。但类表示的是数据和方法的集合,而委托则持有一个或多个方法,以及一系列预定义操作。委托相当于是一个类型安全的、面向对象的C++函数指针。可以把delegate看作一个包含有序方法列表的对象,这些方法具有相同的签名和返回类型,如下图所示。 方法的列表称为调用列表。 委托持有的方法可以来自任何类或结构,只要它们在下面两方面匹配: 委托的返回类型; 委托的签名(包括ref和out修饰符)。 调用列表中的方法可以是实例方法也可以是静态方法。 在调用委托的时候,会执行其调用列表中的所有方法。![[csharp-11-delegate-liebiao.png]] 1234567891011121314151617181920212223242526272829303132delegate void MyDel(int value); //声明委托类型class Program{ void PrintLow( int value ) { Console.WriteLine($"...
C#类和继承(十)
类继承通过继承可以定义一个新类,新类纳入一个已经声明的类并进行扩展。已存在的类称为基类(base class),新类称为派生类(derived class)。 派生类扩展它的基类,因为它包含了基类的成员,还有派生类本身声明中的新增功能。 派生类不能删除它所继承的任何成员。 1234class OtherClass : SomeClass{ //...} 访问继承的成员12345678910111213141516171819202122232425class SomeClass //基类{ public string Field1 = "base class field "; public void Method1( string value ) { Console.WriteLine($"Base class -- Method1: { value }"); }}class OtherClass: Some...
C#方法(九)
方法的构成方法主要有两部分:方法头和方法体。 123456789101112131415//返回类型,方法名称,参数列表int MyMethod(int par1, string par2);static void Main(){ //局部变量,初始化为3 int MyInt = 3; //控制流结构 while(myInt > 0) { --myInt; //方法调用 printMyMessage(); }} 局部变量 对比维度 实例字段 局部变量 生存期 从实例被创建时开始,直到实例不再被访问时结束 从它在块中被声明的那一刻开始,在块完成执行时结束 隐式初始化 初始化成该类型的默认值 没有隐式初始化。如果变量在使用之前没有被赋值,编译器就会产生一条错误消息 存储区域 由于实例字段是类的成员,所以所有字段都存储在堆里,无论它们是值类型的还是引用类型的 值类型:存储在栈里引用类型:引用存储在栈里,数据存储在堆里 类型推断与var关键字var关键字并不是表示特殊变量。只是语法上的速记,表示任何可以从初始化语句...
C#类(八)
随着面向对象的出现,焦点从优化指令转移到组织程序的数据和功能上。程序的数据和功能被组织为逻辑上相关的数据项和函数的封装集合,并被称为类。类是一个能存储数据并执行代码的数据结构。包含数据成员和函数成员。 数据成员存储数据 函数成员执行代码 字段常量 方法属性构造函数析构函数运算符索引器事件 声明类类的声明定义新类的特征和成员。它并不创建类的实例,但创建用于创建实例的模板,类的声明提供以下内容: 类的名称 类的成员 类的特征 1234class MyExcellentClass{ //成员声明} 类的成员字段和方法是最重要的类的成员类型。字段是数据成员,方法是函数成员。 字段与c和c++不同,c#在类型的外部不能声明全局变量。所有的字段都属于类型,而且必须在类型声明内部声明。 1234567class MyClass{ int F1; //初始化为默认值0 string F2; //初始化为null int F3 = 25; int F4,F5 = 25; //声明多个字段} 方法12345...
C#结构、枚举与数组(七)
数组12345678<baseType> [] <name>;<baseType> [] <name> = new <baseType> [ArraySize] {..,..,...}; int[] arr2 = new int[4];MyClass[] mcArr = new MyClass[4];int[,,] arr3 = new int[3,6,2];int[] intArr = new int[] {10, 20, 30, 40};int[,] intArray2 = new int[,] {{10, 1}, {2, 10}, {11, 9}}; ![[csharp-7-array.png]] foreach语句1234foreach (<baseType> <name> in <array>){ //can use <name>...
C#控制流语句(六)
条件执行语句if语句12345678if (<test>){ <code executed if <test> is true>;}else{ <code executed if >test> is false>;} if…else语句123456789101112if (var1 == 1){ // Do somthing}else if (var1 < 1){ // Do somthing}else{ // Do somthing} 123456789101112131415if (var1 == 1){ // Do somthing.}else{ if (var < 1) { // Do somthing } else { // Do somthin...
C#表达式与运算符(五)
字面量整数字面量 十六进制(hex),数字范围(0-F),必须以0x或0X开始。 二进制,数字范围(0或者1),必须以0b或0B开始。 后缀 整数类型 备注 无 int、uint、long、ulong — U、u uint、ulong — L、l long、ulong 不推荐使用小写字母l,因为它很容易和数字1弄混 ul、uL、Ul、UL、lu、Lu、lU、LU ulong 不推荐使用小写字母l,因为它很容易和数字1弄混 实数字面量 后缀 实数类型 无 double F、f float D、d double M、m decimal 无后缀的实数字面量是double类型,不是float类型。 字符字面量 名称 转义序列 十六进制编码 空字符 \0 0x0000 警告 \a 0x0007 退格符 \b 0x0008 水平制表符 \t 0x0009 换行符 \n 0x000A 垂直制表符 \v 0x000B 换页符 \f 0x000C 回车符 \r 0x000D 双引号 “ 0x0022 ...
C#类型、存储与变量(四)
类型预定义类型C#提供了16种预定义类型,其中包括13种简单类型和3种非简单类型。 ![[csharp-4-var-type.png]] 预定义简单类型 名称 含义 范围 .NET 框架类型 默认值 sbyte 8 位有符号整数 -128~127 System.SByte 0 byte 8 位无符号整数 0~255 System.Byte 0 short 16 位有符号整数 -32 768~32 767 System.Int16 0 ushort 16 位无符号整数 0~65 535 System.UInt16 0 int 32 位有符号整数 -2 147 483 648~2 147 483 647 System.Int32 0 uint 32 位无符号整数 0~4 294 967 295 System.UInt32 0 long 64 位有符号整数 -9 223 372 036 854 775 808~9 223 372 036 854 775 807 System.Int64 0 ulong 64 位无符号整数 0~18 446 744...
