EKsumic的个人博客

本博客主要用于整理知识点并分享,转载请注明出处

移动适配已完成,点击左侧按钮可使用目录

CSharp 关注

文章数:36

访问量:1458

关注数:0

演绎 C#高级编程——Reflection反射

反射就像在主程式里面,安装了一个声纳探测器, 在生命周期一开始的时候,就会调用探测器,你的方法执行依赖于声纳反射回来的声波, 这样的做的好处是,当你想更新程序的时候,只需要加dll就行了, 不需要重新编译。 这样,就成了插件式的编程 ...

2020-03-25 17:27:19

阅读数  20

评论数 0

原创 C#高级编程——Attribute特性

在Unity中,当你写 [RequireComponent(typeof(Rigidbody))] 的时候,脚本会为你请求Rigidbody, 一旦这个脚本挂上去, Inspector里面会为你自动增加一个Rigidbody;AttributeUsage()用来定义特性的使用范畴; AttributeTargets.Field 表示能写在字段前面; AttributeTargets.Method 表示能写在方法签名; Inherited=true表示允许继承; AllowMultiple=true表示允许多个特性 ...

2020-03-25 17:14:05

阅读数  16

评论数 0

演绎 [解决方案]C#Winform处理由frm.Refresh()方法造成的屏幕闪烁

对于大多数应用程序,.NET Framework 提供的默认双缓冲将提供最佳效果。默认情况下,标准 Windows 窗体控件是双缓冲的。可以通过两种方法对窗体和所创作的控件启用默认双缓冲 ...

2020-03-20 02:26:41

阅读数  25

评论数 0

原创 C#try和异常

try catch的基本用法就不说了 主要说catch这块, catch里面填的参数,一般是通用异常 比如 DivideByZeroException ex , 但正常会帮你写上Exception ex, Exception 是父类,包含了所有可能的异常, 只要一发生异常,就会执行catch语句。 那肯定有人想问,像IndexOutOfRangeException、 FormatException、OverflowException这些具体的异常 ...

2020-03-19 01:46:32

阅读数  32

评论数 0

原创 C#Lambda表达式

Lambda表达式 ▢ Lambda表达式其实就是一个用来代替委托实例的未命名的方法; 换句话说,它是个方法,它没有名字。 ▢ 编译器会把Lambda表达式转化为以下二者之一:    ▢ 一个委托实例    ▢ 一个表达式树(expression tree),类型是Expression,它表示了可遍历的对象模型中Lambda表达式里面的代码。它允许Lambda表达式延迟到运行时再被解释 ...

2020-03-18 21:50:10

阅读数  29

评论数 0

原创 C#协变、逆变、不变

C#协变、逆变、不变 Covariance 协变 【Code】 可以按F12打开原生C#查看这些接口和类的定义, 可以发现: IEnumerable只作为输出 IList同时作为输入和输出 Action只能输入 于是就有3种说法: Covariance,Contravariance,Invariance Covariance—协变 Contravariance—逆变 Invariance—不变 ...

2020-03-18 03:22:57

阅读数  39

评论数 0

原创 C#泛型约束

C#泛型约束 一般来讲,泛型的类型参数(parameter)可以是任意类型的。 如果只允许使用特定的类型参数(argument),就可以指定约束, 规定: where T:base-class //必须是某个父类的子类 where T:interface //表示T必须是实现了某个接口 where T:class //表示T必须是引用类型 where T:struct //表示T必须是值类型(非空) where T:new() //表示必须有无参构造函数 where U:T //表示U继承于T ...

2020-03-18 01:05:40

阅读数  25

评论数 0

原创 C#Event事件

Event事件 想要了解C#事件,先了解→C#委托 委托通常存在两个角色:广播者和订阅者 订阅者——指的是委托声明 广播者——指的调用委托的方法 可以参考 C#委托(上)的多播, 订阅者可以通过+=和-=来控制监听方法的数量。 这样的操作,被C#简化成了事件, 一方面是为了简化代码,另一方面是为了防止互相干扰。 需要注意的一点: ▢ 事件是一种结构,用于实现广播者/订阅者模型,它只暴露了所需的委托特性的部分子集 ...

2020-03-17 19:10:22

阅读数  32

评论数 0

原创 C#枚举类型

什么是枚举? 枚举是一个特殊的值类型,它可以让你指定一组命名的数值常量。 public enum BorderSide{Left,Right,Top,Bottom} 枚举类型基本上是int且会自动赋值,从0,1,2,3 . . . 也可以是byte: public enum BorderSide:byte{Left,Right,Top,Bottom} 而且还可以指定: public enum BorderSide:byte{Left=1,Right=2,Top=10,Bottom=11} 这种写法等同于 ...

2020-03-17 02:30:52

阅读数  30

评论数 0

原创 C#接口(补充)

Virtual的实现接口成员 ▢ 隐式实现的接口成员默认是sealed。 ▲ 什么是隐式实现的接口成员 [代码] ▢ 如果想要进行重写的话,必须在基类中把成员标记为virtual或者abstract。 [代码] ☆ 其实你不用virtual 、override也能运行,但是子类的这种行为相当于隐藏父类的 ...

2020-03-16 22:07:02

阅读数  40

评论数 0

原创 C#接口

接口 ▢ 接口与class类似,但是它只为其成员提供了规格,而没有提供具体的实现 ▢ 接口里面的成员都是隐式抽象的 ▢ 一个class或struct可以实现多个接口 接口出现的原因 多人协作 接口实例: public interface  IEnumerator {    bool MoveNext();    object Current{get;}    void Reset(); } ▢ 接口的成员都是隐式public的,不可以声明访问修饰符 ▢ 实现接口对它的所有成员进行public的实现 ...

2020-03-16 21:04:32

阅读数  28

评论数 0

原创 C#索引器

C#索引器 ▢ 索引器提供了一种可以访问封装了列表值或字典的class/struct的元素的一种自然的语法 string s="hello"; Console.WriteLine(s[0]); // 'h' Console.WriteLine(s[3]); // 'l' ▢ 语法很像使用数组时用的语法,但是这里的索引参数可以是任何类型的 ▢ 索引器和属性拥有同样的修饰符 ▢ 可以按照下列方式使用null条件操作符 string s=null; Console.WriteLine(s?[0]); ▢ 实现索引器需要定义this属性,并通过中括号指定参数 ...

2020-03-16 03:14:03

阅读数  34

评论数 0

原创 C#sealed关键字、base关键字以及构造函数和继承

sealed关键字 sealed只能写在override前面,其它的成员不能用sealed 可以sealed类本身,就等于sealed类里面所有的virtual函数了 sealed出现的原因其实很简单, 因为不停的继承会产生很多错误, 所以有些类必须封闭, 于是产生了sealed关键字。 初始类并不需要封闭, 只有继承和重写的类才需要sealed。 base关键字 base和this略像,base主要用于: ✦ 从子类访问父类里被重写的函数 ✦ 调用父类的构造函数 ...

2020-03-16 00:43:36

阅读数  39

评论数 0

原创 C#隐藏成员和new关键字

C#隐藏成员 当子类继承父类的时候,在子类中定义一个与父类完全相同的成员,会造成隐藏。 一般这种情况,是偶然的。 即,你写了A类,但过了段时间写了B类继承A类, 但是忘记了A类里面有一个public int Counter成员, 在B里面又定义了一遍, 这种情况,不会报错,但会提示你成员被隐藏 ...

2020-03-15 17:37:37

阅读数  34

评论数 0

原创 C#抽象类

C#抽象类 ✦ 使用abstract声明的类是抽象类 ✦ 抽象类不可以被实例化,只有其具体的子类才可以实例化 ✦ 抽象类可以定义抽象成员 ✦ 抽象成员和virtual成员很像,但是不提供具体的实现。子类必须提供实现,除非子类也是抽象的。抽象类产生的原因 抽象类更像是 提前定义 规则,但是规则的实现 由子类完成。 它本质还是为协同工作提供的素材 ...

2020-03-15 17:16:56

阅读数  30

评论数 0

原创 C#访问修饰符

5个访问修饰符 ✦ public,完全可访问。enum和interface的成员默认都是这个级别 ✦ internal,当前assembly或朋友assembly可访问,非嵌套类型的默认访问级别 ✦ private,本类可访问。class和struct的成员的默认访问级别 ✦ protected,本类或其子类可以访问。 ✦ protected internal,联合了protected和internal的访问级别 ...

2020-03-15 00:50:33

阅读数  45

评论数 0

原创 C#struct关键字(补充)

struct和class差不多,但是有一些不同: ✦ struct是值类型,class是引用类型 ✦ struct不支持继承(除了隐式继承了object,具体点就是System.ValueType)class能有的成员,struct也可以有,但是以下几个不行: ✦ 无参构造函数 ✦ 字段初始化器 ✦ 终结器 ✦ virtual或protected成员 ...

2020-03-14 22:40:25

阅读数  27

评论数 0

原创 C#Null

C#Null 普通的值类型不可为null。 比如int,默认会初始化为0。 C#有一种可空类型(nullable types) 来表示值类型的null。比如 Nullable a=null; 麻烦的写法不符合C#的风格, 所以肯定有简化版本,于是有 int? a=null; Nullable的常用属性和方法 ...

2020-03-14 20:07:21

阅读数  44

评论数 0

原创 C#struct关键字

在 C# 中,结构体是值类型数据结构。 类是引用类型,结构是值类型。 结构不支持继承。 结构不能声明默认的构造函数。 另外, C# 中的结构与传统的 C 或 C++ 中的结构完全不同, C#结构可带有方法、字段、索引、属性、运算符方法和事件, 这些看起来就是个Class的基本功能了, 但是注意, Struct是专门对值类型的,它是存放在栈里面,而不是堆。(就像其它值类型一样) 它不会触发GC垃圾回收。 它比Class功能少 ...

2020-03-14 18:18:04

阅读数  39

评论数 0

原创 C#Expression-Bodied方法

C#Expression-Bodied方法 int Foo(int x){return x*2;} int Foo(int x)=>x*2; void Foo(int x)=>Console.WriteLine(x) 使用这个方法的前提是方法里面只有1次计算(复杂的运算不行)。 这是一个简写方式,可用可不用,看个人习惯 ...

2020-03-14 17:50:24

阅读数  30

评论数 0