期末阶段到来了,一方面要准备着专业课的考试,一方面计算机的进度也不能停下来。在寒假到来之前,机房重构是不打算开始了,到时候做着做着又得停下来,感觉不太好。所以,趁这段时间,找了基本C#、.NET的书看看,把一些基础的东西再巩固巩固。 这一篇主题为“C#之核心语言”。一共包含三编的内容,分别为C#编程介绍、类型和继承。 在这本书中,知识点结构不是很清晰,但是知识点讲解得很详细,对我们来说,还是比较容易理解的。第一编 C#编程介绍这里主要介绍一个命名空间的概念。 【命名空间】用来组织和重用代码的编译单元。之所以出来这样一个东西,是因为人类可用的单词数太少,并且不同的人写的程序不可能所有的变量都没有重名现象。为了解决这个问题,引入了名字空间这个概念,通过使用 namespace xxx。 我觉得就好比储藏室,其中包含各类东西,而需要什么,就从中去找。有时候可能会因为东西一样而拿错,所以就在每个储藏室都编个名,这样就不会混淆,而是到特定的一个储藏室中去取。第二编 类型首先明确这里的类型主要包括哪些东西。
在上面的图中,可能第三级分支大家都很熟悉,而对于第二级分支就感觉陌生不少。
以前也没有这样归类过,比如说类、接口这些都没有想过它们其实都是属于引用类型(由类型的实际值引用(类似于指针)表示的数据类型),而数据类型、结构则是属于值类型(一种由类型的实际值表示的数据类型)。
大体清楚后,就是细枝末节部分的总结。下面的导图就是主要知识点。
其实这部分内容之前也是频频接触,但始终没有专门总结,有疑惑的地方也只是挂着。这一次的学习,加上书上代码的演示,有些东西清楚了不少。比如说成员的可访问性,自己的世界里好像只有public和private。第三编 继承一些类通常会和其它类相关,用于对类进行关联的两种做法是容器和继承。容器表达的是一种“有一个”关系,一个类包含或嵌入另一个类。继承是基于“是一个”关系,一个类是另一个类的一种类型。 继承涉及到一个基类型和派生类型,其保证了层次结构的清晰性,也促进了代码的重用。 引用类型可以继承类和接口,而值类型不能继承其他的值类型或类。 下面是一些概念的比较理解: 【重写】与【重载】 一个基类与一个派生类,当一个基类的一个成员被重写时,基成员和派生成员的签名是相同的。而想要实现重载,需要不同的签名。这就是两者最大的不同。 重写包含的两个关键字: virtual关键字表示一个成员可以在一个子类中被重写。它可以用在方法、属性、索引器和事件上。在派生类中,override关键字表示要对基类的一个虚成员进行重写的意图。 特别地,在C#中,默认情况下,函数不能被重写。父类必须默认方法的重写,此外,子类必须承认它要对方法进行重写的意图。这就防止子类在不知情的情况下对基类成员进行重写。 其次,当一个成员以不同的签名被重写时,在派生类中会产生一个编译器警告,这就防止在希望方法重写的地方意外发生重载。 【构造函数】与【析构函数】 构造函数是对类进行初始化,而析构函数是对类进行清理。 共同点: 两者都不能被继承。所以,基类组件负责对基类成员,派生类组件负责对派生类成员。 不同点: 调用的顺序相反。构造函数是从基类的构造函数自上而下地调用,而析构函数是被自下而上地调用,最后派生的组件最先被清理。 下面看实例,从结果中可以更加清楚的看到两者的顺序相反。 前者为构造函数调用,后者为析构函数的调用。下面是代码:
构造函数与析构函数的应用:
【抽象类】与【接口】public class starter { public static void Main() { XClass obj = new XClass(); } } public class ZClass { public ZClass(int param) { Console.WriteLine("ZClass constructor"); } } public class YClass : ZClass { public YClass(int param) : base(YClass.MethodA()) { Console.WriteLine("YClass consturctor"); } public static int MethodA() { Console.WriteLine("YClass constructor initializer"); return 0; } } public class XClass : YClass { public XClass():base(XClass.MethodA()) { Console.WriteLine("XClass consturctor"); } public static new int MethodA() { Console.WriteLine("XClass constructor initializer"); return 0; } }<span style="font-family: Arial, Helvetica, sans-serif;">public class Strater</span>{ public static void Main() { XClass obj = new XClass(); } } public class ZClass { ~ZClass() { Console.WriteLine("ZClass destructor"); } } public class YClass : ZClass { ~YClass() { Console.WriteLine("YClass desturctor"); } } public class XClass : YClass { ~XClass() { Console.WriteLine("XClass desturctor"); } }
原文地址:http://blog.csdn.net/hu_zhiting/article/details/42638031