Visual C#之核心语言

	期末阶段到来了,一方面要准备着专业课的考试,一方面计算机的进度也不能停下来。在寒假到来之前,机房重构是不打算开始了,到时候做着做着又得停下来,感觉不太好。所以,趁这段时间,找了基本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");
        }
    }

【抽象类】与【接口】

抽象类就是概念。abstract关键字使得一个类抽象化。抽象类的存在为继承提供了广阔的空间,不能为一个抽象类创建一个实例。

一个接口是一个协定,定义了从基类概括出来的必不可少的行为。一个接口要求制定一个行为集合,但是并不实现它。派生类型可以以一个恰当的方式自由地实现接口。接口必须被继承,不能为一个接口创建一个实例。

知道了两者的概念后,就会觉得两者有相似之处,下面就是对两者进行的一个简单的比较:

相同:

一个接口类类似于一个抽象类。两者都要被继承,都不能被实例化。

抽象类的成员要求在派生类型中加以实现,接口的成员也要求在派生类型中加以实现。

不同点:

抽象类可以包含一些实现,而接口不能有实现。

抽象类可以继承其他类和接口,而接口只能继承其他接口。

抽象类可以包含字段,而接口没有状态。

抽象类具有构造函数和析构函数,而接口没有。

接口可以被结构继承,而抽象类不能。

接口可以支持多继承,而抽象类只能支持单继承。

一直觉得,接口的概念很难理解,最后,就用生活中的实例再来说说接口的应用:

车的行为包括点火、熄火、加速和减速等。而车又有很多类型,如小汽车、摩托车和公交车等等。它们都拥有车的上述行为,我们就可以用一个接口来封装好这些行为。因为不同的车对这些行为的实现结果是不一样的。如:小汽车和摩托车的加速是不一样的。定义好了这样一个接口,就可以让不同的车自己去实现自身的一个和其它车不一样的行为。

总结:

这一编的学习内容很基础,在之前的学习中也接触过。但总是感觉有些概念理解得很模糊,借这段复习时间,偶尔抽个时间看本书温习整理整理,感觉效果还是不错的。加上这一次也有了概念之间的对比和实例结果支撑,理解得也更加深刻了些。

				
时间: 2024-10-10 20:24:01

Visual C#之核心语言的相关文章

Visual Studio Code更改语言

参数地址:Visual Studio Code 设置Display Language介绍 在Visual Studio Code中使用快捷键Ctrl + Shift + P可以打开命令行 在locale中输入zh-CN则为中文,如果是en则为英文 在英文状态下输入Configure Language也可以打开语言配置

javascript 核心语言笔记 6 - 对象

对象是 JavaScript 的基本数据类型.是一种复合值:将很多值聚合在一起.对象可以看做是无序集合,每个属性都是一个名/值对.这种基本数据结构还有很多叫法,比如「散列」(hash).「散列表」(hashtable).「字典」(dictionary).「关联数组」(associative array).JavaScript 还可以从一个称为 原型 的对象继承属性 JavaScript 对象是动态的 -- 可以新增属性也可以删除属性,除了字符串.数字.布尔值.null 和 undefined 之

卸载和修复Visual Studio 2013中文语言包

卸载VS2013中文语言包 为VS2013安装语言包,需要下载名为vs_langpack.exe的可执行文件,而卸载语言包也可依赖该文件. 为可执行文件创建快捷方式. 打开快捷方式的属性界面,在快捷方式选项卡的目标属性值后,加入如下内容:/Uninstall.注意,在斜杠前有一位空格. 确定退出属性面板,执行该快捷方式,即可卸载语言包. 修复VS2013中文语言包 Microsoft Visual Studio 检测到已安装的语言资源版本不匹配.例如,在为其他语言安装产品的不同版本(Beta.R

javascript 核心语言笔记 5 - 语句

表达式在 JavaScript 中是短语(phrases),那么语句(statements)就是 JavaScript 整句或命令,语句以分号结束.表达式计算出一个值,语句用来执行以使某件事情发生 表达式语句 赋值语句.递增/减运算.delete 运算符删除对象属性.函数调用都是表达式语句 1 gretting = "Hello " + name; 2 i *= 3; 3 count++; 4 delete o.x; 5 alert(greeting) 6 window.close()

javascript 核心语言笔记- 2 语法结构

字符集 JavasSript 程序是用 Unicode 字符集 编写的,Unicode 是 ASCII 和 Latin-1 的超集,支持几乎所有在用的语言.ECMAScript 3 要求 JavaScript 的实现必须支持 Unicode 2.1 及后续版本,ECMAScript 5 则要求支持 Unicode 3 及其以后的版本 区分大小写 JavaScript 是区分大小写的.关键字.变量.函数名和所有的标识符(identifier)都必须采取一致的大小写形式 需要注意的是 HTML, H

iOS开发核心语言Objective C —— 全部知识点总结

本分享是面向有意向从事iOS开发的伙伴及苹果产品的发烧友,亦或是已经从事了iOS的开发人员,想进一步提升者.假设您对iOS开发有极高的兴趣,能够与我一起探讨iOS开发.一起学习,共同进步.假设您是零基础.建议您先翻阅我之前分享的iOS开发分分钟搞定C语言系列,然后在開始Objective C语言的学习,假设您遇到问题也能够与我探讨.另外将无偿分享自己整理出来的大概400G iOS学习视频及学习资料,都是干货哦.能够新浪微博私信?关注极客James,期待与您的共同学习和探讨! ! 由于时间有限,每

iOS开发核心语言Objective C —— 所有知识点总结

C和OC对比 OC中主要开发在什么平台上的应用程序?答:可以使用OC开发Mac OS X平台和iOS平台的应用程序 OC中新增关键字大部分是以什么开头?答:OC中新增关键字大部分是以@开头 OC中新增加了那些数据类型?答:Block类型指针类型(Class, id类型)空类型特殊类型(SEL, nil) 面向对象特性是什么?答:继承性,封装性,多态性 import和#include有什么区别? 答:import 的功能和 include一样, 是将右边的文件拷贝到当前import的位置.为了降低

iOS开发核心语言Objective C —— 面向对象思维、setter和getter方法及点语法

本分享是面向有意向从事iOS开发的伙伴们.或者已经从事了iOS的开发人员.假设您对iOS开发有极高的兴趣,能够与我一起探讨iOS开发.一起学习,共同进步.假设您是零基础,建议您先翻阅我之前分享的iOS开发分分钟搞定C语言系列.然后在開始Objective C语言的学习,假设您遇到问题也能够与我探讨,另外将无偿分享自己整理的大概400G iOS学习视频及学习资料.都是干货哦.能够新浪微博私信?关注极客James.期待与您的共同学习和探讨.! 由于时间有限,每天在工作之余整理的学习分享.难免有不足之

iOS开发核心语言Objetive C —— 编译器指令@[email&#160;protected]自定义构造方法及类工厂

本分享是面向有意向从事iOS开发的伙伴们,或者已经从事了iOS的开发者.如果您对iOS开发有极高的兴趣,可以与我一起探讨iOS开发,一起学习,共同进步.如果您是零基础,建议您先翻阅我之前分享的iOS开发分分钟搞定C语言系列,然后在开始Objective C语言的学习,如果您遇到问题也可以与我探讨,另外将无偿分享自己整理的大概400G iOS学习视频及学习资料,都是干货哦!可以新浪微博私信?关注极客James,期待与您的共同学习和探讨!!由于时间有限,每天在工作之余整理的学习分享,难免有不足之处,