摘要: 扩展方法是静态方法,属于类的一部分,但实际没有放在类的源代码中。 包含静态扩展方法的类也必须是静态的。 定义和使用如下: 1 /// <summary> 2 /// 表示颜色的枚举 3 /// </summary> 4 public enum Color 5 { 6 Red, 7 Black 8 } 阅读全文
posted @ 2020-04-12 19:49 VTing4You 阅读(104) 评论(0) 推荐(0) 编辑
摘要: partial关键字允许吧类、结构、方法或接口放在多个文件中。 假设以下User类被一分为二: User.cs 1 public abstract class BaseUser 2 { 3 protected BaseUser(string id) 4 { 5 Id = id; 6 } 7 publ 阅读全文
posted @ 2020-04-12 19:48 VTing4You 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 枚举是一个值类型,包含一组命名的变量。 使用关键字enum定义,例如: public enum Color { [Description("红色")] Red, [Description("黄色")] Yellow, [Description("黑色")] Black } 枚举默认从0开始,也可以指 阅读全文
posted @ 2020-04-12 19:33 VTing4You 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 一般来说,引用类型(类)的变量可以为空,而值类型(结构)的变量不能为空。 但使用可空类型是可以使值类型为空。 使用,只需要在类型的后面添加"?"。例如: 1 int a = 0; // 一般情况下值类型要么是合法赋值的值或者是类型的默认值 2 int? b = null; // 使用可空类型可以将值 阅读全文
posted @ 2020-04-12 19:18 VTing4You 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 在C# 7.2中添加了in修饰符,保证发送到方法中的数据不会更改(在传递值类型时)。 例如以下代码: 1 /// <summary> 2 /// 结构C 3 /// 值类型 4 /// </summary> 5 public struct C 6 { 7 public int X { get; se 阅读全文
posted @ 2020-04-12 19:16 VTing4You 阅读(126) 评论(0) 推荐(0) 编辑
摘要: 解决方法如果返回多个值,但可能类型不同的问题。 假设一个将整数字符串转为整数的方法。 代码如下: var number = int.Parse("2"); // 结果:2 var number2 = int.Parse("Hello"); // 报错,与期望传递的值不匹配:只能传递整数类型的字符串 阅读全文
posted @ 2020-04-12 19:00 VTing4You 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 假设有以下两个类型 类A和结构B,它们包含的成员一样,都有一个属性X,也都有一个改变X属性的方法,参数为结构或类本身的实例。方法都将X的值改为2,更改之后,X的值将会是? 代码如下: 1 /// <summary> 2 /// 创建一个类A 3 /// </summary> 4 public cla 阅读全文
posted @ 2020-04-12 18:26 VTing4You 阅读(368) 评论(0) 推荐(0) 编辑
摘要: 定义一个与包含的类同名的方法,但该方法没有返回类型。 例如: 1 public class User 2 { 3 public string Id { get; set; } 4 public string Name { get; set; } 5 // 没必要指定只带有一个空的构造函数,因为编译器 阅读全文
posted @ 2020-04-12 18:24 VTing4You 阅读(182) 评论(0) 推荐(0) 编辑
摘要: 在C#中,方法的定义包括任意方法修饰符(如方法的可访问性)、返回值的类型,然后依次是方法名、输入参数的列表。 方法的返回值必须与方法定义时的类型一致。 例如以下一个判断输入的参数是否是偶数的方法: 1 /// <summary> 2 /// 判断一个数是否是偶数 3 /// </summary> 4 阅读全文
posted @ 2020-04-12 18:22 VTing4You 阅读(134) 评论(0) 推荐(0) 编辑
摘要: 首先接收var关键字,它用于表示隐式类型化的变量。 var与new关键字一起使用时,可以创建匿名类型。 匿名类型只是一个继承自Object类且没有名称的类。该类的定义从初始化器中推断,类似于隐式类型化的变量。 创建匿名类: 1 var user = new 2 { 3 Name = "小明", 4 阅读全文
posted @ 2020-04-12 18:21 VTing4You 阅读(119) 评论(0) 推荐(0) 编辑
摘要: 属性(property)是一个方法或一对方法,在客户端代码看来,它(们)是一个字段。 例如: public class User { // 将用户的名称字段设置为_开头且小写形式命名的私有字段。 private string _name; // Name属性包含get和set访问器,来检查和设置支持 阅读全文
posted @ 2020-04-12 18:19 VTing4You 阅读(206) 评论(1) 推荐(0) 编辑
摘要: 为了保证对象的字段不嫩改变。 使用readonly修饰符声明。 只能在构造函数中分配值。 可以是类的成员,需要把static修饰符分配给该字段。 例如: 1 /// <summary> 2 /// 获取Web.config配置文件,例如数据库连接字符串等 3 /// 只需要在应用程序启动时获取一次就 阅读全文
posted @ 2020-04-12 18:16 VTing4You 阅读(239) 评论(0) 推荐(0) 编辑
摘要: 类包含成员,成员可以使静态成员或实例成员。 静态成员属于类,实例成员属于对象(类的实例化,使用类创建一个对象)。 类和对象的表示,例如: 1 // 类 2 // 创建一个表示用户的类 3 public class User 4 { 5 public string Name { get; set; } 阅读全文
posted @ 2020-04-12 18:13 VTing4You 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 类和结构都是创建对象的模板,都是用new关键字来声明实例。 类:关键字class,是引用类型,总是存储在堆(heap)上。 结构:关键字struct,是值类型,总是存储在栈(stack)上。较小的数据使用结构可提高性能。 实际开发中使用最多的还是类。 阅读全文
posted @ 2020-04-12 18:10 VTing4You 阅读(97) 评论(0) 推荐(0) 编辑
摘要: 数据类型的一些相互转换。 例如: 1 int a = 100; 2 long b = a; // 隐式转换,因为long的长度大于int,所以可以直接将小的赋值给大的 3 4 long x = 1000; 5 int y = x; // 报错,不能直接将x赋值给y。因为x的类型大于y。 6 // 需 阅读全文
posted @ 2020-04-12 18:08 VTing4You 阅读(107) 评论(0) 推荐(0) 编辑
摘要: C#把数据类型分为两种 值类型 引用类型 值类型和引用类型存储在内存的不同地方。 值类型存储在栈(stack)中,直接存储其值。 引用类型存储在托管堆(managed heap)上,存储对值的引用。 例如值类型: 1 // i和j的值会在内存的两个地方被存储 2 int i = 20; 3 int 阅读全文
posted @ 2020-04-12 18:07 VTing4You 阅读(119) 评论(0) 推荐(0) 编辑
摘要: 常量是其值在使用过程中不会发生变化的值。 关键字const const int a = 100; 常量的特点: 必须在声明时初始化,赋值之后就能再改写了! 值必须能再编译时用于计算。所以,不能用从变量中提取的值来初始化常量! 默认总是隐式静态的。也无需且不允许在声明时指定static关键字! ... 阅读全文
posted @ 2020-04-12 18:06 VTing4You 阅读(81) 评论(0) 推荐(0) 编辑
摘要: 使用.NET Framework的应用程序和使用.NET Core的应用程序都需要CLR(Common Language Runtime,公共语言运行库)。 然而,.NET Core使用CoreCLR,而.NET Framework使用CLR。 在CLR执行应用程序之前,编写好的源代码都需要编译。 阅读全文
posted @ 2020-04-12 18:05 VTing4You 阅读(428) 评论(0) 推荐(0) 编辑