C#笔记整理6


**************************事件和委托************************

1.事件和委托

a.方法可以调用自己\\回调

b.签名相当于参数列表

c.委托是一种类型(函数类型)-->其的变量就是一个函数的引用

d.委托变量可以作为参数进行传递---->就相当于函数指针类型

2.事件

e.在定义事件之前一定要定义一个委托,然后根据委托定义事件

f.定义事件名称的规则EventName,定义委托的名称规则NameHandle

g.在触发事件之前一定要判断是否为Null

if(event!=null)

{

触发事件

}

h.    public static Receive (object  Sender , Event  e)   // sender是的窗体本身    e继承与Event的事件


3.Array是集合的基类

a.因为类的静态成员属于类,而不能与对象绑定,所以静态对象也不能作为属性

b.静态属性石属于类的


4.如果想在类内使用成员(类)变量的方法,则应将该成员(类)变量初始实例化,eg:

class  heaterWater

{

   public  Alarm  _al=New  Alarm();

  public void heatWater(  )

  {

    ....+=New Temp ( _al.MakeAlert)  //如果不实例化al,则al的方法调用不出来

  } 


5. 尤其是类的static  引用成员变量最好(一定)要初始实例化,(至少New 一个空间出来,才能调用其中的方法),eg:

class  A

{

     private   static  ArrayList   _Arr_Stu=new  ArrayList(   );

}


6.事件只能在自己所定义的类内调用,在其他类内只能绑定,而不能调用

7.获取键盘的数值:

  ConsoleKeyInfo   confo

   ConsInfo=console.ReadKey(true) //true  不显示,false显示

8.可以重写Array.sort( )  //Icompare--->重写这个接口来完成特定的排序,只需要随便定义一个雷中重写就可以了

a.  public   class   SortByName:system.collection.Icompare

{

    // 重写

}

b.  Sort(Array ,  New   SortByName(  )  )

c.  接口的子类实例就等同于父类接口的实例(也是一种多态)


9.转换方式

a.  Convert--->  适合于多数的类型进行转换(尤其是值类型)

b.   as ---->适合于引用类型进行转换,且编译期间不报错


***********************集合**************************

1.集合都需要实例化,Array不需要(时一种特殊的数组)

2.所有集合中都是Object元素

3.    Stack   s= New  Stack ()

       s.Push("A")  //数值型的数据传递时-->就是Copy,无论是否是字面量或者变量都是一样,引用传递地址,所以只能是变量

4.  HashTable  键值对

键相当于索引,可以使任何类型,键不能相同,值可以相同


5.

生成 ----->编译期间

>  -------->运行期间

6. SortList类似于HashTable,添加完成后会自动排序

7.   

foreach(  DictionaryEntry   item  in   sorted)

{

console.writeLine(...item.key  ,item.value)  // foreach  从sorted等集合中读出的是每个元素的引用地址

}


8.

a.  字典类:hashTable ,SortedList 都有GetEnumerator方法来得到一个迭代的对象(使用  .MoveNext(  )  方法来迭代)  ,但是SortedList多一个SortedList.GetByIndex方法来进行索引迭代

b.字典的key就相当于索引



***********************泛型***********************

1.可以重写Icompareble 接口来----->使用Array.Sort(Array,Icompare)---->来进行排序

2.

a. 集合中都是object类

b. List是ArrayList的引申(相似)

c. Dictionary于hashTable(相似)

d. hashtable和sortedList自动排序


3.hashtable和Dictonary使用MoveNext(  ) 的区别:

hashtable.GetEnumerator 然后  .key就可以得到Key;Dictionary.GetEnumenrator 然后  .Current.key ---->得到key

4.队列的泛型

Array和ArrayList都有Sort方法,可以对Icompare重写来实现指定的排序

5.泛型接口

a.继承与List的都可以排序

b.Dictionary(字典集合)--->自动排序(不用排序)

c.队列(不用排序)--->已经强制排序


6. 

string   stringinput  ="123+4/5*3-4+5%2/3"

Regex  r=New Regex(@"\d+")

string [  ]  ops=r.split(stringinput)  ---->好东西,可以根据正则表达式冲string中提取符合对顶的字符串(例如:\D   \d)


********************调试异常******************

1.及时窗口---->相当于表达式

2.异常

a.不异常抛出的话,程序会终止

b.Exception  异常的基类(系统异常,应用系统异常)

c.异常一般发生在方法执行时 *(!!)

d. finally即使之前有return ,也会执行

e.  finally中不能使用return和 goto

f.  在小方法内部的异常最好throw抛出异常到该方法外(否则只能在小方法内捕获异常),然后被调用的大方法中所捕获

show (  )

{

  throw ...//小方法中抛出异常   ---------------->   public static void  Main(  )

}                                                                                  {

                                                                                             show(  )  ----> Main中调用show方法,可以在Main中捕获show抛出的异常

                                                                                   }




*************************窗体************************

1.整个窗体叫做容器

a.调用起始主界面的窗口程序也有入口文件

b.界面类和后台代码同时存在,才能打开

c. private  void  FrmLoad..  

{

窗口加载后的事件

}

d.窗体显示方法   .show( ) --->不锁定窗体,可创建多个窗体       showDialog( )---->锁定窗体,不继续执行

e.  initializeComponent(  ) 中

一般先执行,只有生成控件后控件才可以使用,所以自定义的代码放在其后

f.  父子窗口传递参数,不要再子窗口的初始化中进行(intial...),而是要在子窗口的构造函数中完成

g.  窗口中的控件初始设置修改,可以放在 ...load事件中设置   //initialComponent(  ) 中一般是属性中设置的选项

h. 两个相同的控件添加相同事件时要重置,否则会使同一个事件

i. initializeComponent 在load(  )事件之前, >  load 事件在窗口显示之前  > 窗口显示


2.异常处理的好处就是:可以让程序处理完异常以后继续执行( 尤其是运行期)

3.  focus--->  当前控件获取光标

4.  容器汇总可以嵌套容器

5.  写文字必须使用lable

6.  窗体关闭时必须关闭线程time(否则会一直运行)  ---->在Form.Closing 事件中关闭

7.  对话框可以直接使用,不用new ------>来实例化,例如:

   if( colorDialog.showDIalog(  )==.....)

8. 容器可以用于逻辑分组(eg:  chechBox)  对于单选分组

9.  ....group.add  控件add到什么容器下就属于什么容器

10. 引用类型的变量被赋值时,要么有一个现成的实例(堆上)的地址赋予给它,要么要new 一个实例,然后将地址赋予给它

11. string.IsNullorEmpty(text) -->可以用来判断一个string是否为空

12.  

....(object  sender ,keyprossEvent   e)

{

    if(....)  {  e.handled =true ;} ---->不执行事件

}

13. string  path= Application .startupPath +@"\calc.exe" --->可以不用"\\"了

以上是本进程存放的路径

14.每个控件都可以绑定一个tag(类型是object的,可以储存一些控件的信息)

15.   Text.contain(" .")   //string的一个方法

16. TextBox.text.indexof(string ,int  index)   //index 指的是字符,在文本汇总的索引

17.如果想使用(触发)某个控件的键盘和鼠标事件,必须使该控件处于active状态----->focus(  )状态


******************数据结构*****************

1.数据结构要有关系(数学模型) :线性结构,树状结构,网状结构

2.链表:单链表,双链表

3.  public  Node(  object data) :this(data,null,null) //初始化列表,先调用Node有四个参数的构造函数进行构造


*******************I/O******************

1.  Application.stortupPath  --->当前项目路劲 

2.  当对文件流进行读写时,peek( )  紧随其移动直到末尾,peek=-1

3. st=new  streamReader(filestrream) // 文件流操作完后都要关闭

4. 

 sw.writeline()

sw.flush()  --->  每次写入后一定要清空 flush( )

sw.close() 

5. path.GetTempFileName( )  获取临时文件路径

6.  sw.flush(  )--->保证缓存中数据少

      sw.Dispose(  )  ----->释放托管的资源

7.FileInfo和StreamFilek都可以创建文件

8.二进制文件是以byte方式写入的

9.文字以外的需要二进制方式类读写

10.

UTP8 Encoding utf= new UTF8Encoding (  )

byte[  ] bytes=utf.GetBytes(string)

fs,write (bytes,0,bytes.length()) //以字节形式赌徒要设置UTF8Encoding编码

11.可以以字节(单个字节)或二进制(机器码)方法读取文件,而且一次都是一个字节





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值