读取 Console.ReadKey();
References项包含项目中使用的一个.NET库列表
弹出消息对话框MessageBox.Show(“”);
事件用 += ,表示注册, += new 一个事件处理器
Object sender 表示谁发生了这个事件
Eventargs 事件的对象
随机数 Random rnd = new Random(); rnd.Next(255) //0~255的随机数
组件里面的timer对象 ,不显示,相当于闹钟一样 属性 Interval,时间间隔,单位是毫秒,要把enable改为True
控制台应用程序如果按F5会一闪而过,那么可以用CTRL+F5
Console.Writeline(“aaa”), 读入 Console.Readline()
Console.Writeline(“ {0}, {1}”,a, b); {0}表示第0个参数
事件驱动的编程机制
Web应用程序也成为ASP.NET应用程序
将文本解析为实数 double a = double.Parse(textBox1.Text)
由于C#自动进行对象的释放,所以用户一般不定义析构方法
private string _name //字段
public string Name {
get {return _name;}
set {_name = value}
}
class A {
public int a;
}
//继承A,覆盖a要用new
class B:A {
new public int a;
}
//访问父类的方法
base.sayHello();
//如果不能转换,那么值就是null
Student s1 = s2 as Student;
//is 运算符
if (p is Person)
//访问控制符
internal //相同程序集的非子类也可以访问
static 也可以修饰构造方法,表示构造某一类,只会调用一次,调用时间不确定
readonly 相当于不可改变量,只可以覆一次值,在构造或在声明的时候赋值,只能修饰字段
sealed 表示不可继承
abstract 表示不可以实例化
interface 接口,一个引用类型,比抽象类更抽象,帮助实现多重继承(因为C#只是单继承),实现不相关类的相同行为
通过接口可以了解对象的交互界面,而不需要了解对象所对应的类,习惯上都已i字母开头
定义一个接口
public interface IstringList {
void Add(string);
int Count {get;}
string this[int index] {get; set;}
}//这里 public abstract 两个关键字不写出来 ,因为默认就是public abstract
当多个接口有相同的方法的时候,继承接口的类在实现方法的时候在前面加上接口名
如void Iwindow.Close()
那么在调用的时候用强制类型转换 ( (Iwindow) p ).Close(); 就可以调用Iwindow接口的Close方法
strcut和class的区别:struct是值类型,它不能包含无参数的构造方法,字段在定义时不能给初始值,构造方法中必须对每一个字段赋值
枚举实际上是有意义的整数
delegate 委托,实际上就是函数指针,对函数原型的包装,是引用类型,一种类型,而事件不是类型
public delegate double Mydelegate(double x);
实例化
Mydelegate d2 = new Mydelegate(obj.myMethod) //括号里面是某个对象/类的某个方法,把这个方法给包装起来
委托的合并--多播MultiCastDelegate:
一个委托可以包含多个函数,返回值没有意义,没有先后顺序,用+= -=
不同的委托是不能相互转换的,意思就是委托与委托不能相加减
事件相当于回调函数
this.button1.Click += new System.EventHandler(this.button1_click);
也可以:
this.button1.Click += this.button1_click;//不能认为是加了一个函数,而是编译器把这个函数转化为委托
private void button1_click(object sender, EventArgs e) { //sender 谁发生了这个事件, e 事件参数
....
}
事件的声明
public event 委托名 事件名
定义及使用事件六部曲
1.声明事件参数类 class xxxEventArgs{}
2.声明委托 delegate void xxxEventHandler(obj, args)
3.定义事件 public event 类型 名称 //在一个类中
4.发生事件:事件名(参数) //在一个类中
5.定义一个方法: void 方法名(obj, args) //在别的类中
6.注册事件: xxx.事件 += new 委托(方法名 ) //在别人的类中
使用系统的事件如(Click)是比较容易的(在Visual Studio中只要在+=后面按两次Tab键)
事件在类外置能用+= -=
可以定义事件的存取器
修饰符 event 委托类型名 事件名 {
add {e += value;}
remove {e -= value;} //实际编程中不用写add remove
}
匿名函数 delegate(参数){方法体}
可以被隐式转换为一个兼容的委托类型
lamda表达式相当于匿名方法的简写,省略delegate,甚至省略参数类型:
直接用 (参数)=>{} 或者 x=>x*x;
匿名函数多一个功能:不写(参数)的匿名函数可以专程任意多个参数的委托
Linq:language Integrated Query
var m = from c in customers where c.Age > 10 orderby c.Name select new {c.Name, c.Phone}
另一种写法
var m = customers
.Where c.Age > 10
.Orderby c.Name
.Select new {c.Name, c.Phone};
类型转换运算符声明形式
public static implicit operator 类型(类型 参数名) {} //隐式转换
public static explicit operator 类型(类型 参数名) {} //强制转换
异常处理
如果try子句中有return语句,则finally子句也会执行
try {....}
catch(Exception e) {...}
finally {....}
System.Exception类
在catch异常时,子类异常(更具体的异常)在写到父类异常(更一般的异常)的前面。
抛出异常 throw expression