Q1:引用
类库的中类调用的物理基础,dll后缀名文件,为引用文件。在引用中添加相关的dll文件之后,便可以调用类库中的类和其方法,进行使用。
白盒引用:
dll文件project包含在solution中,可以很方便的debug出来
黑盒应用:
只有编译完成的dll文件,有问题只能等其修改,重新编译后才可以使用。
以为类库与类库之间也有依赖关系,所以为了一次性把顶层类库和其依赖的底层类库一起引用,便有了类库包形式的引用,NUGET技术
Q2:名称空间
名称空间是一一种合理的方式(树的形式)组织了类和其他类型。
Q3:类
面向对象语言的主体,程序的主入口也包含与类中。
理解的包含关系:
Solution(可同时含有多个project)—project(可被多个solution同时包含)—类、引用、配置
Q4:C#中类型的根
C#中的所有类型都派生自object类型
故而所有类型都有的public方法
Equals();
比较类型的两个变量所引用的实例是否相等,相等则返回TRUE,负责FALSE。
GetHashCode();
得到变量对应的哈希值。如果改变量作为哈希表中的健使用时,应该重写此方法,但是一般不做此操作。
ToString();
返回类型的全称。在使用时,会重写此方法,用来类型中string的值(用来标识类的状态的字段)
GetType();
得到类型,配合反射使用。
Q5:对象哈希码
FCL的设计者认为,将任何对象的任何实例存放到哈希表集合中,能带来很多好处,为此GetHashCode(),能获取任意对象的Int32哈希码。
在哈希表中,只有哈希码相等,对象才会被视为相等。
所以在重写了Equals,或者其他比较的方法时候,都要重写GetHashCode,以确保相等性算法和对象哈希码算法一致。
一般的操作可以是:返回 类型中某几个值类型的哈希码的某种运算结果的值
如长方形类,可以返回类中长和宽的哈希码的或值的操作。
Q6:new操作编译器所做的事
创建并初始化类型对象指针和同步块索引成员;调用其后的构造方法;最后调用Object的构造方法----只是简单地返回,其他什么都不做。
并且没有对应的delete操作符,CLR采用了垃圾回收机制能够自动回收不用的变量。
Q7:转换
转换分为隐式转换和显示转换。
当使用父类变量去引用子类的实例的时候,使用的隐式转换,并且是默认可行的。
Object o=new NewObject();
当要还原回去的时候,就需要使用到显示转换
NewObject newObject=(NewObject) o;
这可能会涉及到转换失败,如转换的类不是原来的子类。
所以便引用了IS AS
IS用于判断某个对象引用的实例是否为某个类型的实例
if(o is NewObject)
如果是则返回TRUE,否则FALSE。
然后在进行显示转换操作,
当然为了更方便操作,优化性能,可以直接使用AS操作符
NewObject newObject=o as NewObject;
如果成功newObject则会得到类型的实例,若失败则为null。
所以在进行AS转换之后,使用相关变量则要先进性判空再使用。