- 博客(10)
- 收藏
- 关注
原创 CLR整理
CLR 公共语言运行时托管执行过程1.选择编译器 .net中包括c#,vb,vc++等,选择合适编译器2.编译为 MSIL 编译器将源代码转换为 Microsoft 中间语言 (MSIL) 和计算机系统结构有关3.将 MSIL 编译为本机代码 根据本机结构编译为本机代码:&nb
2021-06-08 22:14:33
755
原创 [习惯] 用内插字符串取代string.Format()
【习惯】用内插字符串取代string.Format() String.Format() 的缺点是编译器不会验证带替换的序号数量和参数数量是不是相等。如果不等,程序就会抛异常。还有可能序号顺序和参数位置不是正确的,这个就容易出错。当然这些都是可以通过耐心避免。 内插字符串,这样的语法糖就是很好的,更直观的表达参数。 如:Console.Write...
2019-01-24 19:52:09
581
原创 [习惯] 优先考虑is或as运算符,尽量少用强制类型转换
【习惯】优先考虑is或as运算符,尽量少用强制类型转换 情景:比如所使用的框架在方法签名里把参数类型写成了object,那么用到时可能要先将参数类型转换。 用 as运算符 或者 强制类型转换(cast)来绕过编译器的类型检查 两种办法进行类型转换之前,可以先通过as运算符来判断操作是否合理。 采用as运算符比盲目的使用强制类型转换更安全,而且在...
2019-01-21 17:26:43
296
原创 [习惯] 考虑用readonly代替const
【习惯】考虑用readonly代替const C#有两种常量,一种是编译期的常量,一种是运行期的常量。他们的行为大不相同,如果选择不合适,程序开发就可能受影响,通常编译期常量会让程序稍快一点,但是远不如运行期常量那样灵活。 这样的取舍下,只有当程序性能极端重要并且常量取值不会随版本变化时,才考虑使用编译期常量。 而readonly就是运行期的常...
2019-01-18 12:42:58
537
原创 [习惯] 优先使用隐式类型的局部变量
【习惯】优先使用隐式类型的局部变量 使用var来声明隐式类型的局部变量,编译器会自动选择合适的类型,如返回值不确定具体类型时,就可以用var,但不能滥用,会导致代码难以阅读,甚至可能产生微妙的类型转换bug。 使用var来声明变量会令人把注意力放在最为重要的地方,即变量的语义,如果类型不合适,编译器会提醒。 变量的类型安全与有没有把类型写...
2019-01-18 12:42:23
265
原创 [多线程] 向线程传递参数
【多线程】 向线程传递参数 根据作为参数的方法是否为静态有两种情况,现在定义一个线程 var t = new Thread(); 像线程t传参 1.对于非静态方法,如果该方法内需要用类内的变量,需要定义构造函数,如果不需要类内的变量就可以不定义。 如果用到构造函数并且要传参给构造函数,就要在类new对象时传参数给对象。 ...
2019-01-17 21:12:24
382
3
原创 [实例] 从一个方法返回多个数据项
【实例】从一个方法返回多个数据项 (方法一 out) 在参数列表里加「out 类型 名称」如void Method(out int name) 在方法内out参数必须初始化或赋值,保证方法运行完out参数有值传回 调用该方法,可以获取到out参数的值 (方法二 类或结构体) 定义一个结构体里面包含多个属性, ...
2019-01-09 15:40:35
265
转载 委托
当要把方法作为参数传递传递给其他方法时,就需要委托。使用委托时,需要两个步骤:声明委托和注册委托。1.声明委托就是定义要使用的委托。对于委托,定义它就是告诉编译器这种类型的委托代表了哪种类型的方法(参数类型和返回值类型等)。定义委托的关键字是delegate,语法如下:public delegate 返回值 委托名(参数签名)如:public delegate void Wri...
2018-06-21 15:04:03
363
原创 [练习] 判断闰年
using System;namespace ConsoleApp1{ class Program { static void Main(string[] args) { int x; Console.WriteLine("请输入年份"); x = Convert.ToIn...
2018-04-11 22:18:04
343
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人