C#技术
2017-03-29 11:44:28 0 举报
AI智能生成
C,一个充满神秘与魅力的字母。它是拉丁字母表中的第三个字母,代表着创新、创造力和无限可能。在音乐中,C是大调的主音,它的声音清脆悦耳,给人以愉悦的感受。在科学领域,C元素碳是生命的基础,它构成了地球上所有生物体的骨架。在文化中,C代表着许多美好的事物,如友谊、爱情和成功。C的形状优雅而简洁,它的出现总是让人眼前一亮。无论是在文字、艺术还是生活中,C都扮演着重要的角色,为这个世界增添了无尽的魅力。让我们一起探索C的世界,感受它所带来的无尽惊喜吧!
作者其他创作
大纲/内容
继承
继承的类型
实现继承和接口继承
多重继承
一个类不能继承自多个实现继承,但是可以继承自多个接口继承
结构和类
实现继承
虚方法
virtual & Override关键字
隐藏方法
调用基类继承
base.methodname
子主题
abstract
c++ 中的纯虚函数
密封类和密封方法
sealed关键字
派生类的构造函数
修饰符
可见性修饰符
其他修饰符
子主题
泛型
概述
性能
System.Collections 和 System.Collections.Generics
类型安全
二进制代码的重用
代码的扩展
命名约定
创建泛型类
IEnumrator GetEnumerator的重载
yield语句:创建一个枚举状态机
yield return current.value
泛型类的功能
默认值
default的使用方法
约束
如果泛型类需要使用泛型类型中的方法,就需要使用约束
where TDocument:IDocument
types
where T:struct
where T:class
where T:IFoo
什么是IFoo类
where T: Foo
where T:new()
指定类型T必须有一个默认构造函数
where T1:T2
继承
作为父类(基类)时,
派生类继承父类的泛型类型
派生类指定弗雷的泛型类型
静态成员
只能在一个实例中共享???
对于静态成员的引用,不能通过实例,而必须同过类来进行
故而一旦泛型被指定为某种类型,则该类型只能有一种静态成员的值
泛型接口
协变和抗变
指的是对参数的返回值类型进行转换
只能用在泛型委托和泛型接口上和值类型或引用类型上,主要是对象参数和返回值的类型进行转换。
泛型接口的协变
子主题
泛型结构
Nullable=> ?
Nullable<int> => int ?
泛型方法
Eg: void Swap<T>(ref T x, ref T y)
带约束的泛型方法
带委托的泛型方法
public static T2 Accumulate<T1,T2>(IEnumerable<T1> source, Func<T1, T2> action
decimal amount = Algorithm.Accumulate<Account, decimal>(accounts, (item, sum)=>sum += item.Balance;
泛型方法规范
其他会涉及到的
泛型委托
泛型集合类
泛型扩展方法
数组
简单数组
初始化
myArray = new int[4];
int myArray = new int[4];
int [] myArray = new int[4]{1,2,3,4};
int [] myArray = new int[]{1,2,3,4};
int [] myArray = {1,2,3,4};
使用引用类型
多维数组
锯齿数组
每一行都可以有不同的大小
int [] [] jagged = new int[3][];
Array类
创建数组
= 为引用传递,原值改变会引起复制数据的数据改变
若要使被复制的数组不受影响,那么需要使用 Clone 或者 Copy方法
排序
sort
自定义数组排序,需要实现IComparable接口
注意区分Icomparable 与Icomparer 类
作为参数的数组
数组协变
参数定义为(object[] data)
ArraySegment<T>
枚举
IEnumerator接口
foreach语句
先调用GetEnumerator方法
yield语句
迭代集合的不同方式
用yield return返回枚举器
元组
Tuple<T1,T2>
结构比较
运算符和类型强制转换
运算符
条件运算符
checked和unchecked
标志位checked可以进行溢出检查
is运算符
as运算符
sizeof运算符
复杂类型,sizeof需要放在unsafe块中
typeof运算符
可控运算符 ?
空合并运算符
??
类型的安全性
类型转换
隐式转换
显式转换
装箱和拆箱
装箱
将值赋给Object类型
拆箱
将object类型的值赋给其他类型
拆箱必须小心,可能引起异常
比较对象的相等性
比较引用类型的相等性
ReferenceEquals()
虚拟的Equals()方法
静态的Equals()方法
比较运算符(==)
比较值的相等性
不能使用ReferenceEquals方法
运算符重载
运算符重载的工作方式
运算符重载的示例: Vector结构
委托, lambda表达式和事件
委托
声明委托
delegate void IntMethodInvoker(int X))
使用委托
简单的委托举例
MathOperation Ops[] = {};
Action<T> 和 Func<T>委托
Action<in T1, in T2>
Func<in T1, out TResult>
BubbleSort 排序
static public void Sort<T>(IList<T>sortArray, Func<T,T,bool>comparison)
多播委托
Action<T>
匿名委托
Lambda表达式
子主题
子主题
Func<string, string>OneParam=s=>String.Format("change uppercase{0}, s.ToString());
多个参数
Func<double, double, double>twoParams=(x,y)=>x*y;
多行代码
若一行代码,可以不用加括号
若多行代码,需要加大括号和return语句
Lambda表达式外部的变量
事件
事件发布程序
委托EventHandler<TEventArgs>定义
public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e) where TEventArgs: EventArgs
定义事件: public event EventHandler<TEventArgs> eventSample;
事件监测器
consumer 为时间监听器。其定义需要符合Event的要求, void类型,参数为 Object sender, EventArgs e
弱事件
IEnumerator 与IEnumberable关系??
与yield语句的关系??
C#_2
字符串和正则表达式
System.String
创建字符串
子主题
StringBuilder成员
格式化字符串
字符串格式化
FormatterVector示例
子主题
正则表达式
@“\bn” 表示以n开头的单词
@“ion\b” 以ion结尾的单词
子主题
集合
集合接口和类型
0 条评论
下一页