接口用于规范一个类应该拥有什么样的成员
接口只能是成员的说明
ref 将函数中的对参数的修改返回到函数外
命名空间可以包含其它命名空间
委托,类似C语言函数指针
引用一旦被分配,一般不能被改变,指针则可以
引用存放在heap上,执政存放在stack
decimal 类型 高精度浮点型,28个有效数字(金融)
decimal val = 1.23M;
声明数组时[ ]必须跟在类型后面,而不是标识符后面
int[ ] table;
声明数组时必须实例化
int[ ] number = new int[5];
二维数组和交错数组:二维数组int [10,10]矩阵形式
交错数组number[ ][ ]每行列数可以不一样
每行分数组元素必须再次实例化
foreach (变量 in 集合)
循环体
int i = 123;
object o = i; //boxing 装箱
int j = (int) o; //unboxing拆箱
将值类型装箱成引用类型
类修饰符:
public : 可有任何其他类型访问
Private:只能由同一程序集中的类型访问
abstract:抽象类或成员,指示某个类只能是其他类的基类sealed:指定类中不能被继承
Virtual:可以在派生类中被重写的成员
static:静态类或成员
partial:在程序集中定义分部类
new:在子类中覆写基类成员
Override:在子类中扩展继承成员
event:声明事件
extern:指示在外部实现方法
readonly:声明字段只读
unsafe:声明不安全上下文
volatile:指示字段可由操作系统、硬件或并发执行线程等着程序中进行修改
override(重写)
1、方法名、参数、返回值相同。
2、子类方法不能缩小父类方法的访问权限。
3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。
4、存在于父类和子类之间。
5、方法被定义为final不能被重写。
overload(重载)
1、参数类型、个数、顺序至少有一个不相同。
2、不能重载只有返回值不同的方法名。
3、存在于父类和子类、同类中
继承中只允许单继承、父类在前,接口在后,接口可以多继承
09.24
通过委托类型声明事件
public event EventHandler MyEvent;
触发事件
MyEvent(this,null);
使用操作符+=
a.MyEvent += new EventHandler(MyHandler);
操作符重载
operator+(int a,int b)
{
return (a+b+1000);
}
const和static readonly定义的常量是静态的,只能由类直接访问;而readonly定义的常量是非静态 的,只能由实例对象访问;
尽量使用私有字段private少使用public
如果在类内声明事件,必须首先声明该事件的委托类型
public delegate event
委托:以函数为形参,委托函数运行时同时调用形参函数(被委托函数)
09.25
线程挂起
委托
泛型,类似C++中的模板,多个功能类似类型不同的函数可以用一个泛型来解决
public class GenericList<T>
{ void Add(T input) { } }
GenericList<int> list1 = new GenericList<int>();
GenericList<string> list2 = new GenericList<string>();
泛型和重载如何选择
集合数据类型(*****)
Lambda表达式:类似委托,支持带可绑定到委托或表达式树的输入参数的内联表达式(=>)读为goes to
x =>x*x
delegate int del(int i);
del myDelegate = x =>x*x;
int j = mDelegate(5); //j=25
var可赋予局部变量或数组‘’推断类型‘’(var)而非显示类型
var i = 5;//i is compiled as an int
var s = "Hello"//s is compiled as an string
var anon = new { Name = "Terry", Age = 34};//内部临时类匿名类型一般在查询表达式的select语句中,以便返回源序列中每个对象的属性子集
在LINQ中比较常见
LINQ:可以对数据库进行行扩展
GetType()获得数据类型
10.8
checked 和 unchecked
int x = Int32.MaxValue;
x = x + 1;
Console.WriteLine(x);
checked
{
Console.WriteLine(X+1);//如果产生溢出抛出异常,缺省的情况下不检查溢出异常 ,带有溢出产生异常
}
public string StuNo1;
private string StuNo { get; set; } //好的编程习惯,尽量减少public字段
10.9
通过可读写属性实现属性
set{...} get{...}
特性Attribute
[DllImport(""user32.dll")]
public class MyDllimportClass
{..}
补充说明下列代码的特征,归属,编译过后仍然存在,虽然不存在可执行性信息
如何使用特性
CTS 通用类型系统
只定义语义,不定义语法
值类型:放在进程的堆栈(包括结构,枚举)(复制的时候复制包含的值)
引用类型:存放在内存内存空间的堆,堆的地址存放在堆栈中
(复制到时候仅仅复制对象的引用)