C#基础

2021-07-08 13:05

阅读:558

标签:静态方法   struct   对象   ring   轻量级   array   匿名   out   return   

  1. Constructor不可以被继承,因此不能被重写(Overriding),但可以被重载(Overloading).
  2. 先Return再finally
  3. 接口是可以继承接口的,抽象类是可以实现接口的,抽象类可以继承实体类,但是有个条件是,实体类必须要有明确的构造函数。
  4. final 用于申明属性,方法和类,表示属性不可变,方法不可以被覆盖,类不可以被继承。
  5. Finalize方法只能由GC调用,我们是不能调用的
  6. Const用来申明编程时申明常量,ReadOnly用来申明运行时常量。Const在申明时指定初始值,ReadOnly在申明和构造器中指定
  7. var申明变量时,必须初始化
  8. 装箱和拆箱

委托:

  • 理解为类型安全的方法的指针,方法的抽象,把一类具有相同参数和返回值(相同签名)的方法委托给委托去执行
  • 委托指向方式:New, =,Lambda表达式(匿名委托)。+=和-=:注册和注销委托方法,不会创建新的委托实例,用于多播委托
  • 委托可以指向静态方法和实例方法
  • 多播委托,用+=注册,按顺序执行,如果函数有返回值,那只有最后一个函数的返回值会被正确返回。可用于观察者模式
  • 泛型委托,泛型委托包括Action、Func和Predicate
  • bool Predicate:表示定义一组条件并确定指定对象是否符合这些条件的方法。通常,此类委托由Array和List类的几种方法使用
  • Action、Action、Action、Action 参数更灵活,但无返回值
  • Func、Func、Func、Func 参数灵活,有返回值
  • 委托的申明和使用和类非常相似。没错,委托本质上就是一个类。
  • 协变与逆变:协变就是委托的返回值是它所指向函数的返回值的基类;逆变就是委托的参数类型是它所指向函数的参数的派生类。
  • 异步委托:BeginInvoke,IAsyncResult.AsyncWaitHandle.WaitOne(1000, false);EndInvoke默认线程池中的线程都是后台线程。后台线程随应用程序关闭而关闭,后台线程可以随时被CLR关闭而不引发异常的,也就是说当后台线程被关闭时,资源的回收是立即的,不等待的,也不考虑后台线程是否执行完成。而前台线程不受外在因素的影响。假如应用程序退出,造成它的前台线程终止,此时CLR仍然保持活动并运行,使应用程序能继续运行,当它的的前台线程都终止后,整个进程才会被销毁。
  • 事件与委托的千丝万缕。
  • 事件是用event修饰的委托,这体现了事件是通过委托来实现的。
  • 委托隐含具有sealed属性,即不能用来派生新的类型。
  • 委托的作用:

委托可以更方便更有组织的管理我们需要调用的方法,理论上没有数量限制,只要是符合某一个委托签名的方法都可以由该委托管理
可以异步调用,不阻塞主线程
方法可以作为一种参数在代码中进行传递
面向抽象编程,优化框架
Lambda:(x,y,……)=>{……}
委托对象是一个派生自 System.MultcastDelegate


  • 高内聚低耦合。高内聚:模块独立(功能需求定义清晰);低耦合:模块之间依赖度低。作用:可维护性、可复用性
  • 值类型,引用类型,栈,堆,ref,out
  • 栈值结构
  • 无论值类型也好,引用类型也好,正常传参都是把栈里的值复制给参数,从栈的角度看的话,C#默认是按值传参的。
  • ref 值类型时,CLR背后会先复制一份该值的引用地址,并指向该值,再把引用地址传出去
  • 传引用类型时,ref就没意义了,string除外
  • string是特殊的引用类型,具有不变性,ref可以控制其不变性,成为普通引用类型
  • 不可不知的string
  • String主要具有以下的两个显著的特点:
  • String的恒定性:String一经创建,它所对应的字符序列就无法更改(当然我们的前提是托管的环境下)。
  • String的驻留:CLR对String的创建实行驻留机制,CLR只会维护具有不同字符序列的String。换言之,在程序中使用到的具有完全相同的字符序列的String均是对应着同一个string对象,是对同一个段内存的引用。值得一提的是String的这种驻留机制不仅仅是基于某个单独的AppDomain的,而是针对整个进程的。
  • string是特殊的引用类型,其特殊就特殊在stringr的不变性,赋值时会指向新地址,需要ref来固定引用地址(控制其不变性,成为普通引用类型)。所以对string频繁赋值时一般用StringBuilder
  • string相当于String的反射,一种简写,就像int对应于Int32一样,二者在C#中可通用。如果用string,编译器会把它编译成String
  • 运算符重载

public static int operator +(Person p1,Person p2)
{
return p1.Age+p2.Age;
}


volatile,定义轻量级同步变量,本质是:“直接存取原始内存地址”

C#基础

标签:静态方法   struct   对象   ring   轻量级   array   匿名   out   return   

原文地址:https://www.cnblogs.com/glyson/p/9737406.html


评论


亲,登录后才可以留言!