ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C#基础

2022-08-04 20:03:21  阅读:141  来源: 互联网

标签:C# 子类 object 基础 类型 父类 ref out


1、new后面可以跟匿名类型,使用方法例如:
var student = new {name = “张三”,age = 18};
属性无需定义类型,系统可自动识别(类似于var)

2、invoke()/BeginInvoke()
同步方法:等待Invoke方法里面的线程执行完之后再往下执行,方法体里面的线程是并行的,方法体外的线程会等待。
而BeginInvoke区别于Invoke的特点是不会阻塞当前线程。

3、Assembly:程序集
但凡涉及到反射,必定涉及到程序集,通过反射创建实例对象必须用到CreateInstance()方法,整个反射的核心就是这个CreateInstance()方法
而GetType()、typeof()只是获取类型名。创建一个tpye类型的实例,这个实例实际上是存放类型的说明信息。

4、object类型可以强转为任意类型,因为它是所有类型的父类,父类可以通过里氏转换调用子类的成员。
但是里氏转换得有个前提,就是父类对象里装的必须是子类对象,如果先创建了一个父类的对象,再让
他接受一个子类对象,那此时指向得是子类对象所在的空间。只要不给父类一个子类对象,就不能进行强转,
否则运行时会抛异常(程序不会报错)。

5、readonly 只读关键字
区别于const常量,readonly修饰的字段,其初始化仅是固定了其引用(地址不能修改),但它引用的对象的属性是可以更改的。
而·加上static readonly 就相当于静态字段,若是为值类型且已赋值,则等同于const。若是为引用类型,则无法被实例对象调用。

6、ref、out
值类型也有它自己的地址,即指针,现在用ref和out修饰后,传递的就是这个指针,所以可以实现修改后a,b的值真正的交换。
这就是ref和out给我们带来的好处。区别:ref得先初始化,而一个参数要是加了out且还未赋值,相当于就是通过这个方法初始化这个属性。
ref传进去的参数在函数内部可以直接使用,而out不可(除非在函数体内部,out参数在使用之前赋值)。

7、dymanic、Object、Var?
var: 当使用 var 关键字声明变量时,将在编译时根据初始化字符串推断该变量的类型。 在运行时无法更改该变量的类型。 如果编译器不能推断类型,它会生成一个编译错误。

object:需要使用显式转换将已声明为 object 的变量转换为特定类型。

dymanic动态类型:C# 4 中引入的 dynamic 关键字可使某些传统上依赖于 object 关键字的情形更容易编写和维护。 实际上,动态类型在后台使用 System.Object 类型。但与 object 不同的是,动态类型不需要在编译时执行显式转换操作,因为它仅在运行时识别类型。编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性。

标签:C#,子类,object,基础,类型,父类,ref,out
来源: https://www.cnblogs.com/Darius0821/p/16552178.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有