何时使用泛型集合
摘要:【何时使用泛型集合】1、List是C++中的Vector(特性一模一样),C#中的非泛型版本是ArrayList。在泛型下,非泛型版本实际上已经没有存在的意义了。 当List内存不足时,List会申请一块2倍于现有内存的空间,然后将原有内存拷贝到新空间下。所以,避免性能问题的一个方法是直接预分配好...
阅读全文
lock关键字
摘要:【lock关键字】 lock关键字可确保当一个线程位于代码的临界区时,另一个线程不会进入该临界区。 如果其他线程试图进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放。 lock关键字在块的开始处调用Enter,而在块的结尾处调用Exit。 通常,应避免锁定public类型【Mo...
阅读全文
泛型中的协变和逆变
摘要:【泛型中的协变和逆变】 协变指能够使用比原始指定的派生类型的派生程度更大的类型,逆变指能够使用比原始指定的派生类型的派生程度更小的类型。 协变与逆变的本质就是参数的替换。逻辑不变,只进行参数的替换,以实现更高程序的复用。 通常,协变类型参数可用作委托的返回类型,而逆变类型参数可用作参数类型。对...
阅读全文
实现foreach遍历
摘要:【实现foreach遍历】 IEnumerable的原始版本存在于System.Collection中。 一个类想要被foreach遍历,需要实现此IEnumerable接口。 1 public class People : IEnumerable 2 { 3 private Per...
阅读全文
AttributeUsage
摘要:【AttributeUsage】 System.AttributeUsage声明一个Attribute的使用范围与使用原则。 AllowMultiple和Inherited参数是可选的,所以此代码具有相同的效果: AttributeTarget的值可以参考1。部分可取值如下: 如...
阅读全文
System.Diagnostics.Conditional
摘要:【System.Diagnostics.Conditional】 指示编译器当特定的宏定义了时,才生成此方法的相应代码。只能应用于AttributeClass、Method。 参考:http://msdn.microsoft.com/zh-cn/library/system.diagnost...
阅读全文
C# Enum,Int,String的互相转换
摘要:【C# Enum,Int,String的互相转换】1、Enum-->String(1)利用Object.ToString()方法:如Colors.Green.ToString()的值是"Green"字符串;(2)利用Enum的静态方法GetName与GetNames: public static...
阅读全文
Mono在Full AOT模式下的限制
摘要:【Mono在Full AOT模式下的限制】 调试时遇到一个Mono运行时异常:ExecutionEngineException: Attempting to JIT compile method '...' while running with --aot-only. 最后发现原因是使用了泛型接...
阅读全文
default of c#
摘要:【default of c#】 在泛型类和泛型方法中产生的一个问题是,在预先未知以下情况时,如何将默认值分配给参数化类型 T:T 是引用类型还是值类型。如果 T 为值类型,则它是数值还是结构。 给定参数化类型 T 的一个变量 t,只有当 T 为引用类型时,语句 t = null 才有效;只有当 T...
阅读全文
C#自省
摘要:【C#自省】1、根据string,获取type。Type.GetType 方法,获取具有指定名称的Type,执行区分大小写的搜索。 2、根据obj,获取type。Object.GetType 方法,获取当前实例的Type。 int n1 = 12;int n2 = 82;long n3 = 12...
阅读全文
继承和泛型
摘要:【继承和泛型】 在使用子类一般类型参数时,必须在子类级别重复在基类级别规定的任何约束。例如,派生约束: 基类可以定义其签名使用一般类型参数的虚拟方法。在重写它们时,子类必须在方法签名中提供相应的类型: 您可以定义一般接口、一般抽象类,甚至一般抽象方法。这些类型的行为像其他任何一般基类型...
阅读全文
泛型和强制类型转换
摘要:【泛型和强制类型转换】 编译器允许您将一般类型参数显式强制转换到其他任何接口,但不能将其转换到类: 但是,您可以使用临时的 Object 变量,将一般类型参数强制转换到其他任何类型: 不用说,这样的显式强制类型转换是危险的,因为如果为取代一般类型参数而使用的类型实参不是派生自您要显式强...
阅读全文
一般约束
摘要:【一般约束】 使用 C# 泛型,编译器会将一般代码编译为 IL,而不管客户端将使用什么样的类型实参。因此,一般代码可以尝试使用与客户端使用的特定类型实参不兼容的一般类型参数的方法、属性或成员。这是不可接受的,因为它相当于缺少类型安全。在 C# 中,您需要通知编译器客户端指定的类型必须遵守哪些约束,...
阅读全文
为什么要使用泛型?
摘要:【为什么要使用泛型】 通过泛型可以定义类型安全的数据结构(类型安全),而无须使用实际的数据类型(可扩展)。这能够显著提高性能并得到更高质量的代码(高性能),因为您可以重用数据处理算法,而无须复制类型特定的代码(可重用)。在概念上,泛型类似于 C++ 模板,但是在实现和功能方面存在明显差异。 考虑...
阅读全文
extern
摘要:【extern】 extern修饰符用于声明在外部实现的非托管方法。 Theexternkeyword is also used as a method modifier, declaring a method written in unmanaged code. [DllImport("av...
阅读全文
弱引用 - WeakReference
摘要:【弱引用】 弱引用允许应用程序访问对象,同时也允许垃圾回收器收集相应的对象。如果不存在强引用,则弱引用的有限期只限于收集对象前的一个不确定的时间段。使用弱引用时,应用程序仍可对该对象进行强引用,这样做可防止该对象被收集。但始终存在这样的风险:垃圾回收器在重新建立强引用之前先处理该对象。 弱引用特...
阅读全文
泛型代码中的默认关键字
摘要:【泛型代码中的默认关键字】 在泛型类和泛型方法中产生的一个问题是,在预先未知以下情况时,如何将默认值分配给参数化类型 T:T 是引用类型还是值类型。如果 T 为值类型,则它是数值还是结构。 给定参数化类型 T 的一个变量 t,只有当 T 为引用类型时,语句 t = null 才有效;只有当 T ...
阅读全文
可空类型
摘要:【可空类型】 Nullable types are instances of theSystem.Nullablestruct.ANullablecan be assigned the valuestruefalse, ornull.The ability to assignnullto nume...
阅读全文
Property
摘要:【Interface Property】 Properties can be declared on aninterface (C# Reference). 按如下形式实现interfac来避免冲突。 在没有interface前缀的情况下,编译器不会报错,2个interface引用同一...
阅读全文
GC类
摘要:【GC类】 GC是一个静态类。 垃圾回收器跟踪并回收托管内存中分配的对象。垃圾回收器定期执行垃圾回收以回收分配给没有有效引用的对象的内存。当使用可用内存不能满足内存请求时,垃圾回收会自动进行。或者,应用程序可以使用Collect方法强制进行垃圾回收。 垃圾回收器不识别非托管代码中对对象的引...
阅读全文