参考链接:https://www.cnblogs.com/bakuhert/articles/5878086.html
装箱在值类型向引用类型转换时发生,拆箱在引用类型向值类型转换时发生,装箱操作和拆箱操作是要额外耗费cpu和内存资源的,所以在c# 2.0之后引入了泛型来减少装箱操作和拆箱操作消耗。
参考链接:https://blog.csdn.net/qiaoquan3/article/details/51439726
结构体不能从基类继承,但类可以结构体不能有无参构造函数在构造函数结束之前,所有的结构体域都必须被赋值结构体是传值,而类的实例是传引用
参考链接 : https://blog.csdn.net/wolf96/article/details/75332914
ref : 方法定义和调用方法都必须显式使用 ref 关键字,传递到 ref 参数的参数必须初始化,否则程序会报错
out : 方法定义和调用方法都必须显式使用 out关键字,out关键字无法将参数值传递到out参数所在的方法中,只能传递参数的引用(个人理解),所以out参数的参数值初始化必须在其方法内进行,否则程序会报错
相同点: ref和out都是按地址传递,使用后都将改变原来参数的数值。一定程度上解决了C#中的函数只能有一个返回值的问题
不同点:
ref将参数的参数值和引用都传入方法中,所以ref的参数的初始化必须在方法外部,进行,也就是ref的参数必须有初始化值,否则程序会报错
out不会将参数的参数值传入方法中,只会将参数的引用传入方法中,所以参数的初始化工作必须在其对用方法中进行,否则程序会报错
参考链接: https://www.cnblogs.com/GreenLeaves/p/6843026.html
百度了一堆都不知道怎么估计的,不过看到一个好东西: C#内存泄漏工具
static Attribute GetCustomAttribute():这个方法有8种重载的版本,它被用来取出施加在类成员上指定类型的Attribute。
static Attribute[] GetCustomAttributes(): 这个方法有16种重载版本,用来取出施加在类成员上指定类型的Attribute数组。
static bool IsDefined():由八种重载版本,看是否指定类型的定制attribute被施加到类的成员上面。
实例方法:
bool IsDefaultAttribute(): 如果Attribute的值是默认的值,那么返回true。
bool Match():表明这个Attribute实例是否等于一个指定的对象。
TypeId: 得到一个唯一的标识,这个标识被用来区分同一个Attribute的不同实例
自定义Attribute:
[AttriubteUsage(参数设置)]
public class 自定义Attribute : Attribute { ... }
AllowMultiple: 读取或者设置这个属性,表示是否可以对一个程序元素施加多个Attribute 。
Inherited:读取或者设置这个属性,表示是否施加的Attribute 可以被派生类继承或者重载。
ValidOn: 读取或者设置这个属性,指明Attribute 可以被施加的元素的类型。
属性与程序元素关联后,可以使用反射查询属性存在及其值。查询属性的主要反射方法包含在 System.Reflection.MemberInfo 类(GetCustomAttributes 方法族)中
System.Reflection.MemberInfo info = typeof(Help);
object[] attributes = info.GetCustomAttributes(true);
for (int i = 0; i < attributes.Length; i++)
{
System.Console.WriteLine(attributes[i]);
}
参考链接 : https://www.cnblogs.com/luckdv/articles/Atrribute.html
https://www.cnblogs.com/anthonyBlog/p/3173922.html
Conditional条件定义符:
配置管理器中新增一个配置(用于条件编译)
在项目工程上右键选择"属性"->"生成"->"条件编译符号"后边的输入框中,配置下拉框中选择对应的配置,输入自定义的条件编译变量,多个变量用";"分割。
参考链接: https://www.cnblogs.com/Music/archive/2011/11/28/about-csharp-conditional-simple-demo.html
抽象主题角色(Subject):抽象主题把所有观察者对象的引用保存在一个列表中,并提供增加和删除观察者对象的操作,抽象主题角色又叫做抽象被观察者角色, 一 般由抽象类或接口实现。抽象观察者角色(Observer):为所有具体观察者定义一个接口,在得到主题通知时更新自己,一般由抽象类或接口实现。具体主题角色(ConcreteSubject):实现抽象主题接口,具体主题角色又叫做具体被观察者角色。具体观察者角色(ConcreteObserver):实现抽象观察者角色所要求的接口,以便使自身状态与主题的状态相协调。
1.观察者模式支持广播通信。被观察者会向所有的注册过的观察者发出通知。