Advertisement

C#学习笔记 1. C#是Visual Studio开发的一种编程语言 2. C#支持面向对象编程和结构化程序设计方法 3. C#语法与Java相似但有不同之处

  • 5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:TXT


简介:
C#学习笔记(1) 51099在线学习网上线 文章来源:网络采集 发布日期:2006年5月25日 字体:[大 中 小51099网络课程平台,访问地址为http://www.51099.com。 结构与类在本质上存在显著差异。尽管它们都可包含数据成员和函数成员,但结构作为值类型无需进行堆分配,其变量直接存储数据而不需引用对象。相对于类而言,结构更适合表示轻量级对象如点、矩形及颜色等。虽然理论上可以将一个点视为类实例,但在某些方案中使用结构更为高效。 在构造函数方面,结构允许自定义参数化的版本,而无需为默认构造函数提供无参数初始化(这会导致字段未赋值状态)。与类不同的是,结构的实例化可通过$ new$关键字完成而不必依赖对应构造函数。如果不调用显式构造函数,则所有字段将保持未赋值状态且对象不可用。 值得注意的是,结构不具备继承能力。即使基类为$ Object$,它也不支持从其他结构或类继承的行为。此外,结构不能作为类的基类型使用。 在装箱与拆箱操作方面,取消装箱过程包括两个主要步骤:首先检查给定的对象实例是否为指定值类型的装箱对象;其次将复制的数据成员赋值回目标变量中。例如: int i = 123; object box = i; // 装箱 int j = (int)box; // 拆箱 这个过程确保了数据在不同类型之间的正确转换。 装箱转换与取消装箱是C#语言中重要的类型转换操作。boxed conversion和unboxing conversion分别用于实现不同类型之间的数据迁移。 在C#编程中,隐式转换是一种无需显式指示的自动转换方式。以下包括但不限于:object o=i;标识转换、隐式数值转换、隐式枚举转换、隐式引用转换等操作属于这一类别。装箱转换则属于显式的类型调整过程。 用户定义的隐式转换允许自定义数据类型的跨类型兼容性,而显式转换则提供了更灵活的方式以指定具体的类型映射关系。 delegate(委托)是一种强大的机制,在C#中实现对方法和实例的封装与调用。它通过将静态方法或实例方法绑定到目标对象上,实现了复杂的调用逻辑。 接口是C#编程中的另一个核心概念,用于定义共性服务并规范其实现方式。一个接口可以有多个基接口继承,并且只能被类或结构实现。显式基接口的使用确保了接口继承关系的透明性和可扩展性。 在C#中,委托类型通过名称等效原则实现了灵活性和安全性。两个看似相同但实则不同的委托类型会被视为独立实体。其参数表、签名及返回类型的一致性是判断兼容性的关键条件。 object 类作为所有其他类型的最终基类,提供了强大的继承机制。任何类型都可以通过显式或隐式的方式与 object 类产生关联。 string 类的实例基于Unicode编码体系,并支持丰富的字符串操作功能。其引用特性使得字符串比较运算符的应用更加直观和便捷。 访问不受限制 只有包含该类的成员的类可以访问 只有当前工程可以访问 只有包含该成员的类和继承的类可以访问 abstract指示某个类只能是其他类的基类。 const指定无法修改字段或局部变量的值。 event声明一个事件。 extern指示外部实现此方法。 override提供从基类继承的虚拟成员的新实现。 readonly声明一个字段,该字段只能赋值为该声明的一部分或者在同一类的构造函数中。 sealed指定类不能被继承。 static声明属于类型本身而不是属于特定对象的成员。 unsafe声明不安全的上下文。 virtual在派生类中声明其实现可由重写成员更改的方法或访问器。 volatile指示字段可由操作系统、硬件或并发执行的线程等在程序中进行修改。 语句是程序指令块。一般情况下,默认会按照代码顺序依次执行各条语句。C#语言定义了以下几类标准语句: 选择语句包括:if、else、switch、case等结构。 迭代/循环语句包含:do、for、foreach、in、while等类型。 跳转相关的语句有:break、continue、default、goto和return函数。 异常处理方面,提供了throw(抛出异常)、try-catch(捕捉异常)和try-finally(执行 finally代码块)机制。 语言特性中还定义了Checked和Unchecked两种状态标识符。此外,还有Fixed关键字用于固定值的引用,以及Lock语句用于控制并发访问。 (1) 遍历每个数组或对象集合中的元素时会执行嵌入语句组。foreach 语句用于循环访问集合以获取信息,但不会修改集合内容从而避免不可预见的副作用。其语法形式如下: foreach (type identifier in expression) statement 若要遍历集合,则该集合必须满足特定条件:集合类型应为 interface、class 或 struct;且包含名为 GetEnumerator 的实例方法(例如 Enumerator)。此类(或结构)需具备以下属性: · Current 属性,返回 ItemType 对象或可转换为此类型的其他对象; · MoveNext 方法,递增项计数器并返回 true 表示集合中存在更多元素。 可用的集合创建方式包括: 1. 根据指导创建一个通用集合,并实现 IEnumerable 接口(适用于 C# 程序)。 2. 在集合类中使用预定义集合(可应用于其他语言如 Visual Basic)。 3. 使用指定模板或直接初始化集合实例。 (2) throw 语句用于在程序运行过程中触发异常。其语法形式为: throw [expression]; 其中,expression 表示异常对象。在 catch 子句中重复出现同一异常时,可省略该表达式。 (3) try-catch 语句由一个 try 块及其后续的多个 catch 子句构成(每个子句对应特定异常处理)。其形式包括: try catch (exception-declaration-1) { ... } catch (exception-declaration-2) { ... } ... 或 try { ... } catch { ... } (4) fixed 关键字用于防止变量被垃圾回收器重新定位。 (5) lock 关键字将特定语句块标记为临界区,确保在此期间只允许一个执行单元修改共享资源。 6. 方法参数说明: - 对于未声明 ref 或 out 的参数,默认采用值传递方式;尽管可以在方法内更改该参数的值,但此改变后的值不会传播到调用该方法的程序中。 - params 关键字可指定具有变长参数的方法(例如 Func, 当前版本支持传入任意数量的参数)。 7. namespace 关键字用于定义和组织代码逻辑结构。大 中 小 打印 加入收藏 关闭 收藏到新浪ViVi 收藏到365KEY 大 中 小 打印 加入收藏 关闭 收藏到新浪ViVi 收藏到365KEY 大 中 小 C#学习系列(二)2002.01.20未经授权的复制、模仿或翻印均受法律保护。 cashcao@msn.com 做出这一项决策精神、信仰和灵魂深深孕育着我思想、欲望、怪癖、邪念、狐臭这些特征都具有一定的负面特质它们以一种隐秘的方式生长在我的体内我要求所有客人都不受区别对待,不论其身份如何。 伊沙以其卓越的商业指导地位闻名于世。他的著作《原则》成为现代商界的重要理论参考,为许多企业提供了坚实的实践基础。伊沙在实践中应用这些原则,取得了显著的成效。作为成功的关键要素,他的核心价值观与执行力同样不可或缺。个人成长不仅依赖于持续学习,还需要不断审视自身并寻求改进空间。我以cash为名;因为我抱有功利主义的立场。 我的星座是Leo,因此我表现出一种男性主义倾向。我选择了C#作为我的编程语言,但对这种选择感到有些犹豫不决。 你能看出这是篇非技术类文章吗?即使从内容上看也难以察觉其中隐藏的爱情故事。有些人用程序来描述爱情,在这些表达中我看到了金钱、女性和性行为,但始终未发现爱的存在。这让我深信,爱情的力量源自内心深处的自然存在,这一信仰至今依然坚定。 C#(发音为 See sharp ),是微软公司最新推出的(?)一种专为.NET平台设计的编程语言。它宣称自己是C和C++家族中第一种具有面向对象特性的语言。很多人可能觉得这门语言与传统的C或C++相似,但事实上它的设计理念更接近于Java的风格,因此作为入门学习者,建议阅读《Java编程:从入门到实践》这本书,这将帮助你更好地理解其核心概念。鉴于本文内容主要面向中文读者,我假设你已经掌握了该语言的基本知识;如果需要进一步了解相关细节,请参考文中提供的链接信息,在线资源会不断更新变化,因此如果有任何链接失效的情况发生,请自行通过Google搜索最新版本。 基于先前的背景介绍,我是一名狮子座男性。过去一段时间里,我对学习Java抱有期待,但后来发现……然而,在坚持了一段时间后,我发现论坛上关于这两种语言的讨论让我感到困惑,于是决定转向C#。我不打算解释自己为何做出这一选择,因为很多人认为中文是世界上最美丽的语言。据我的了解,华人世界中也有许多人在使用汉语作为母语,这让我觉得有些不解或不满。此外,在学习Java的过程中,我发现论坛上的参与者往往表现出很强的个性和对某个主题的热情,但当有人询问哪种语言更好时,他们通常会以“JAVA”这样的形式表达支持,并不解释原因。我觉得这种做法让人不禁思考:是否有些人过于偏执?虽然我是狮子座,但我并不希望被这样误解或看待。 当时,在C#刚刚推出的时候,许多程序员都不由得抱怨了几句——不为高兴,只是因为新增的语言让程序员感到困惑或不满。然而,当他们仔细阅读了C#的帮助文档后,态度却发生了转变。如今人们发现,其实C#的设计非常巧妙:它不仅简洁明了且功能强大,还具有现代、面向对象、类型安全、版本控制和兼容等特点。此外,它的灵活性也为开发者提供了极大的便利。 我有一个不同观点:C#并不是严格意义上的Java复制品,它更像是一个模仿作品。而这些面向对象编程和中间层概念并非完全新颖,它们确实源自于Sun Microsystems的早期开发。更有说服力的是,在“华山论剑”这一系列深入探讨中,有关C#与Java关系的分析得更加透彻。对于我之前那一期对微软态度批评的回应,朋友提出了更为尖锐的观点:他不仅认为微软在产品策略上不够成熟(同样地,虽然有人认为太阳微系统也在不断改进中),更表达了对微软开发Visual J++项目的阻碍行为的不满。此外,这位朋友还指出,在法律诉讼方面,微软公司被指控违反了与Sun Microsystems签订的许可证协议条款。最终的结果是微软公司不得不停止其Visual J++产品的开发工作。不过值得欣慰的是,经过全面向.NET框架战略调整后,微软后来又推出了Visual J#.NET版本,这在一定程度上为Java语言用户提供了更好的支持。有人说,在选择C#这个语言时就意味着必须遵循微软的技术标准(在中国的很多程序员并不对此感到自豪)。如果有人试图说服你理解这种心情是不明智的做法,请想象一下:某人认真地对你解释他为何特别喜欢听毛宁演唱的歌曲。某位师兄对此类事情持相当不屑的态度,并不认同他所推崇的观点,即选择一种语言学习便足够。他认为关键在于你如何运用它,以及是否能超越他人。这不禁让人想起我过去一直深爱的一首歌曲——那是一首非常动人的作品,歌词中写道:“将自己应尽的部分完成得超越他人。”年轻时我就常以此自勉,鼓励自己不断突破自我极限。意识到这个故事目前并未提及桐桐。它是专为她创作的。在此之前,我就已经答应过她。我也曾承诺了更多事项,但至今尚未完成任何一项任务。现在我决定逐一去实现这些承诺,希望能为她的作品带来更好的开端。2000年6月我获得了学位证后迁居石家庄就职于一家IT全方位服务提供商。到任后我的首要工作是从网页设计开始转向 ASP 编程开发基于Web的开发平台。从最初的界面设计到 ASP 编程这一过程充满了枯燥和挑战但这是不可或缺的专业技能学习。在此期间我曾在一家专业报社实习参与了他们网站的设计与制作并负责其中的动画效果这让我结识了同事桐桐。当时她还上着学未完,待会儿!大 中 小 打印 加入收藏 关闭 收藏到新浪ViVi 收藏到365KEY 大 中 小 大 中 小2000年6月我大学毕业,经历了朝夕相处的大学生活后,从北京返回到石家庄,正式开启了职业生涯。如前所述,在最初的一段时间里,我使用的编程语言是 ASP。起初我认为这不能算作真正的编程语言,因为它并不是一种官方认可的编程工具。因此,将其视为动态网页实现技术可能更准确。然而,学习 ASP 看来简单易懂,但在实际操作中却需要付出更多的努力:我还能记得自己在那个孤单的办公室里独自一人使用 Visual Interactive(VI)一步步调试某个网页的情景。每当遇到困难或失败时,我总会想起给我的女儿桐桐打电话的声音。不谋而合地说,我认为自己总能发现一些问题。从当下时刻起,你已经可以看出我并非一位高超的专业人士;我自认为并非专业高超的技艺者,仅仅是浅薄的知识储备以下是我个人对于这一领域的初步见解:于1999年底,我在大学完成了学业后转居石嘴山市。在同一日(西区时)上午十一点半左右,微软公司于其位于西雅图郊区的总部内举行新闻发布会宣布推出.NET计划。该计划包含新的网络运算平台(.NET Framework)、新开发语言(C#)以及最新版本的开发工具(Visual Studio.Net),同时其后版本则以“ASP/NET”命名。当时我对这个项目的兴趣主要集中在ASP.NET上,并借此机会,我得以初步接触并熟悉Microsoft.Net的整体架构和相关技术。虽然 ASP.NET 通常不被视为一种传统意义上的编程语言,但它现已成为构建、管理和部署 Web 应用程序的一个重要平台。该平台允许开发者使用多种 .NET 语言来构建互联网应用,其中自然包括 C#。它们之间的关系可以从下图中看出:这就是著名的 .NET 平台结构图,通过这个图表可以看出,其中包括 ASP.NET、Windows Forms 和 VS.NET 的都是 .NET 开发平台的组成部分,主要用于 .NET 应用程序的开发与展示目的。其核心技术包括通用语言运行时(CLR)、基类库(BCL)以及 .NET 语言等,同时辅以 VS.NET 开发工具的支持。通过这一界面可以看出,在Windows平台之上构建了一个抽象的运行环境,.NET Framework能够支持基于标准通用语言规范(Common Language Specification)的语言开发,包括微软 Visual Basic.NET、C#以及JScript.NET等。这种架构设计允许我们像替换底层操作系统一样将Windows换成Linux或其他系统,并利用符合CLS规范的.NET语言创建ASP.NET或Windows Forms应用程序的功能。这正是我们在之前所述的Monoculture项目的初衷。因此可以说,.NET Framework实现了跨平台开发的核心理念。由此可见,C#作为一种真正能够在不同操作系统之间无缝运行的语言,在代码层面展现出与Java相似的优势:它通过中间字节码(Microsoft Intermediate Language,MSIL)实现统一管理和高效执行,并借助Just In Time编译器将中间字节码转换为底层机器指令以确保性能。” 【注除了C#语言之外,Net programming language(包含我们常见的数十种现代编程语言)均可编写基于CLR的程序代码。此类代码通常被称作managed code,简称为MCode。所有这些managed code均能在CLR环境中执行,并具备不受具体硬件平台影响的特点。解释性的语言具有高度安全性,并且可以通过其运行平台为其提供更多功能,例如自动内存管理、异常处理等。值得注意的是,C#语言的诸多特性主要归因于CLR的支持。请参考下面的 CLR 结构图以获取详细信息。可以看到,在C#语言中拥有类型安全、垃圾回收、异常处理、向下兼容以及多线程支持等功能特性,这些都由CLR(即下一代Windows服务运行时)提供支持。作为直接建立在操作系统层面上的虚拟运行环境,CLR的主要核心功能是负责代码的管理与执行。在.NET平台架构图中, CLR位于 .NET 基类库(Base Class Library, BCL)之上。这组基类库包含了从基本输入输出操作到数据访问等多方面的功能内容,并为各种语言程序提供了一个统一的面向对象、层次化的扩展编程接口。值得注意的是,在 .NET 平台架构图中可以看到,BCL不仅可以被多种语言调用和扩展,因此无论是C#、VB.NET 还是 VC++.NET 等语言,都可以自由地调用相应的 .NET 基类库来完成各种任务需求。实际上, C# 语言并没有自己独立的类库集合,它所依赖的编程接口正是源自于 .NET 提供的基础库体系。因此,在选择使用C#语言进行开发时,真正需要投入学习和掌握的核心内容其实是.NET 框架的基础库:由于C#语言本身仅包含77个基本关键字,并且其语法结构对于大多数开发者来说已经是较为熟悉的内容。相比之下,BCL系统则显得更加复杂,它包含了超过4500个类以及无数的方法、属性等核心功能组件,在任何一个基于C#开发的程序中都可能随时调用到这些内容来完成各种特定任务需求。 许多人对于如何开始学习编程都曾深思熟虑。而对于一个拥有丰富编程经验的人来说,这其实并不困难。然而,对于一名完全没有编程基础的人而言,在使用C#语言时可能会感到困惑,因为其涉及大量复杂概念及术语。因此,在选择学习路径时务必谨慎:任何一种编程语言的学习都是按照从硬件到软件再到应用的整体架构进行的,但在实际学习过程中它们往往是相互关联而非孤立存在的。 建议先从理解整个系统的架构入手,随后逐步掌握各类库的具体使用方法。由于C#语言具有其特殊的架构设计和丰富的内容体系,在深入研究其运行环境(如.NET Framework)之前,全面了解这一特性将会显著提升学习效率。因此,请牢记上述关键框架图,并在日常学习中注意它们的应用场景,虽然可能不会直接涉及它们,但它们始终在其背后默默发挥作用。 还有一个非常重要的概念需要你明白,这就是公共语言架构(Common Language Infrastructure,CLI)。它属于 CLR 的一部分。具体来说,在CLR的结构图中,CLI位于中部区域,主要由类加载器、实时编译器以及运行时环境的垃圾收集器三个部分组成。作为 .NET 和 CLR 的灵魂,CLI为 IL 代码提供了运行的环境。你可以将任何编程语言编写的代码通过相应的编译器转换为 MSIL 代码,并在 CLI 平台上进行执行,甚至可以自定义 MSIL 代码在其上运行。众所周知,欧洲计算机制造商协会(ECMA)于2001年10月13日正式批准了 C# 语言规范(ECMA-334),这一标准已正式成为计算机产业的标准之一。此外,国际标准化组织 ISO 也认可了该标准进入其审议程序。同时,作为 .NET 和 CLR 的核心部分,CLI与C#一同获得了 ECMA 的认证(ECMA-335)。拥有 C# 和 CLI 这两项技术,你便拥有了能力:可以自定义一个能够运行于任何操作系统的 .NET 平台(前提是愿意付出努力)。正如所提到的 Mono 项目所做的那样,其核心组成部分包括一个 C# 编译器、一个 CLI 和一组库。在 Java 的世界里,这项工作是由 Sun 公司完成的,他们针对不同操作系统开发了相应的Java虚拟机以实现Java程序在多平台上的运行。然而,迄今为止,微软还未有推出类似计划的想法(为用户提供非 Windows 系统的支持)。2000年六月还有许多值得回想起的事情。六月的那段时间,我每天放学后都会径直赶到系里实验室旁听欧洲杯的比赛。我对贝克汉姆的喜爱溢于言表,在那场比赛中他的出色表现带领球队以6-1狂胜对手。比赛尾声时,他若即若离的微笑深深烙印在我的记忆里。坦白说,虽然我热衷于观看欧洲杯,但却对那些与之无关的网络术语如‘.Net’和‘.Not’完全不感兴趣。不得不提的是,在这个特别的日子里,无数首经典老歌循环播放,其中最让我难忘的就是那首《我的1980》,仿佛它承载着难以言说的情感。毕业后我们结束了学业。据你所知,我从北京离职了。尚未完成;待进一步处理中。大 中 小 打印 加入收藏 关闭 收藏到新浪ViVi 收藏到365KEY C#学习心得(4) 字号:大 中 小 收藏、打印、加入收藏夹 收藏到新浪ViVi 365KEY 常见的一个典型的C#语言编写的SayHello程序。 using System; class SayHello { public static void Application.Run() { Console.WriteLine(Hello World!); // 使用英文双引号替代中文双引号 } }我首次使用C#与世界取得联系的时间已不可考,但肯定已经问候过一次。当时所用的是微软.NET框架1.0版本。现在您可通过访问http://msdn.microsoft.com/downloads/default.asp?url=downloadssample.asp?url=msdn-files027000976msdncompositedoc.xml下载完整版的.NET Framework软件开发工具包(SDK),其中包括了前面提到的.NET框架,以及编写、编译、测试和开发 .NET 框架应用程序所需的文档、示例、命令行工具和编译器。安装完成之后,即可开始编写并执行C#程序。建议在深入使用前,请务必仔细阅读SDK中的相关文档与示例代码,并尝试按照范例进行二次编写,以加深理解。 当我首次看到C#代码时,确实觉得它如同大眼睛的双胞胎兄弟Java(请注意不是Visual C++)。从语法角度来看,它们共同的父亲自然非C++莫属。对于熟悉过Java语言的人来说(例如在下),理解和处理这段代码极为简单:第一行当然是注释了,C#提供了两种注释方式——单行注释和配对使用*的多行注释。第二行(using System)导入了System这个库包(在C#中被称之为命名空间Namespace),它允许我们方便地调用Microsoft.Net基类库System中的所有类,在此例中使用了System命名空间中的Console类,用于在控制台窗口输出程序运行结果。** 【如前所述,C#并没有内置的输入输出语句,所有需实现的功能都完全来自于.NET基类库。这一句的作用就是告诉编译器该如何定位Console类以便调用。 接下来声明了一个HelloWorld类,这个类中有一个特殊的方法Main(),每个可执行文件都需要一个入口点,在C#中,这个入口点就是Main()方法,此方法将在程序启动时被调用。在这个方法中,Console是在命名空间System下的一个类,它表示的是控制台。这里调用其静态方法WriteLine()。如同C++一样,静态方法允许我们直接作用于类而非实例对象。WriteLine()函数接受字符串类型的参数Hello World !并将其送入控制台显示。如前所述,C#没有自己的类库,它直接获取Microsoft.NET系统类库。在这里正是通过获取Microsoft.NET系统类库中的System.Console.WriteLine()来完成我们想要的控制台输出操作。Hello World!这是一份关于C#开发的基础介绍。该工具包是.net framework SDK的一部分,在不花钱的情况下获取。它允许开发者将.dll扩展名的可执行文件转换为.exe格式,从而生成能够直接在操作系统的环境下运行的应用程序。 使用该工具包进行编译操作时,请注意以下几点:首先,它可以在DOS命令行环境中调用,无需额外安装即可免费使用;其次,在Visual Studio.NET中激活特定的Command Prompt窗口可以提供更高效的开发体验。此外,在安装visualstudio.net后,可以从其提供的项目中选择相应的环境配置选项。 需要注意的是,生成的可执行文件实际上包含.dll扩展名而非.exe,这与其他语言如Java或C++的行为有所不同。C#编译器(csc.exe)生成的文件不是严格意义上的可执行程序(不含机器码),而是PE格式的文件,并带有.exe扩展名。这些PE文件中除了中间语言外,还包含元数据以及编译器添加的目标平台标准可执行文件头信息。中间语言确切指微软中间语言(MSIL),由微软制定的位于源代码和机器码之间的编程语言。在CLR中,特定编译器将此打包为.exe格式的中间伪代码(P代码)。随后另一编译器将其转化为可执行文件。对于微软中间语言,一个形象的比喻是:如果CLR是操作系统的话,那么微软中间语言就是.Net平台上的ASM汇编语言,在.NET平台中,MSIL类似于WindowsAssemblyMetaLanguage(ASM),相当于基于CLR的操作系统层次。相比多数CPU机器码而言,MSIL更高级,支持识别对象类型,并提供构造与初始化对象、调用其虚方法及直接操作数组元素的功能。此外,它还具备检测并捕捉异常以进行错误处理的能力。元数据(Metadata)与MSIL一同包含在已编译程序文件中,并记录了该程序所涉及的各种类型定义、签名信息以及其他相关数据。类似于旧版本的Type Library,同时也完整地保存了该程序所引用的所有外部类的信息。这些内容主要用于以下几项功能:用以展示CLR功能信息;通过定位和加载相关的类实现其在内存中的实例;负责处理调用过程并完成IL指令集到底层代码的翻译工作;加强系统安全性,并正确设置运行时环境边界。 一个基于C#语言开发的源码文件在CLR环境中运行的过程如下:首先,由C#编译器将该源代码转换为包含中间代码(MSIL)和元数据信息的PE文件。每当系统调用这个PE文件时,JIT编译器会将其分解为MSIL部分以及相关的元数据。值得注意的是,在此过程中,MSIL代码不会直接指令.NET框架去调用本地系统接口,而是指示.NET框架生成相应的本地代码库,并将预加载的本地代码存根与对应的字节码信息关联起来。 JIT编译器的工作机制可以分为以下几个步骤:当PE文件被首次调用时,装载器会创建一个运行时脚本(stub)并将其与对应类型的所有方法绑定。一旦某个方法第一次被调用,运行时脚本将控制权转移给JIT编译器。此时,JIT编译器会对MSIL代码进行转换,并生成本地可执行代码段。这些本地代码段通过指针指向预加载的运行时脚本,从而实现高效的运行。 在实际应用中,JIT编译器并不会一次性将所有MSIL代码转换为本地代码,而是会在方法首次被调用时才即时完成该过程。这种机制的优势在于可以有效减少重复编译和执行本地代码所需的时间。然而,这也意味着某些代码片段可能从未经过过编译处理。显然,这样的设计既确保了运行时的安全性(因为未编译的代码无法直接访问系统资源),又在性能上实现了良好的平衡。 这个C#程序的操作流程如下: 1) C#编译器将源代码转换为中间语言(IL) 2) 执行托管代码加载过程,包括解决内存中的名称冲突、表层类布置和JIT编译所需的文件存储。通过执行频繁检查规则来增强访问控制,同时提高了安全性 3) 使用JIT工具将中间码转换为目标代码 4) 装入元数据并校验类型安全性和方法完整性 5) 执行垃圾收集(GC)操作和异常处理流程 6) 进行错误检测与修复服务工作 7) 实现线程管理和上下文切换,以及支持远程管理功能。 无需深入理解这些概念,在未来学习过程中逐渐体会其魅力。现将重点放在操作上,即定位ildasm.exe文件(通常位于同一个文件夹中)。ILDASM是一个用于反汇编的工具程序,其主要功能是解析.net Framework字节码文件。运行命令`ildasm helloworld.exe out=helloworld.il`可执行以下任务:提取反编译结果至helloworld il和helloworld.res两个文件。前者包含元数据及.IL代码片段,后者则为资源文件集。通过记事本打开helloworld il文本,您将发现其定义并实现了继承自System.Object的HelloWorld类,并指定了一个继承于基础类库的HelloWorld类,并实现了其主程序入口点(`Main()`)以及构造函数(`.ctor()`)。此外,该工具还提供了关于项目背景及相关技术细节的元数据信息。如果您希望获得更直观的理解,则可通过ILDASM工具界面可直观观察反编译结果。建议您反复查看这些代码。尽管深入理解全部内容并非重点,但了解程序集及其模块、类型和成员(包括方法)所需的所有Runtime和编译器相关信息是关键。这些元数据提供了关于程序集及其模块、类型和成员的详细信息。在此,我想谈谈关于学习的方面。众所周知,在我们生活的环境中,学习常常会带来一种艰难的过程。获取新知识似乎总出于某些特定目的。我不觉得这有错,但我觉得仅靠获得高收入和赢得尊重远不足以使我们感到快乐;此外,学习还能带来更多愉悦。确实如此。即使现在可能派不上用场的知识点——例如前所述的那些内容——但掌握它们仍然是值得开心的事情。智慧本身就是一个值得追求的美好事物,在生命即将终结之际,那些依然致力于追寻智慧的人们,他们的脚步从未停止过。对于逝去的往事,我的记忆已经模糊不清了。然而每当想起这些往事时,我都感到无比欣慰。当前日期为2002年4月7日,转眼间即将迎来王小波逝世三日的日子。关于这个人,不知道还有多少人还记得这个日子以及这个人。在本文末尾,我建议大家阅读王小波的作品——每一个心智成熟的人都应该读一读王波的文字。在他的杂文随笔集《沉默的大多数》中有一段话讲述了他作为程序员的经历:“要是无法及时调试好这段C++代码,那么我今夜就不会眠。”该事尚未完成,即刻将要继续。

全部评论 (0)

还没有任何评论哟~
客服
客服
  • C
    优质
    《C语言的面向对象编程》是一本介绍如何在传统过程式语言C中实现面向对象设计与编程技巧的书籍。书中通过实例详细阐述了抽象、封装、继承和多态等核心概念,帮助读者掌握用C语言创建高效且可维护代码的方法。 用C语言实现面向对象的思想涉及模拟类、继承、封装和多态等概念。尽管C本身不是面向对象的语言,但可以通过结构体(struct)定义数据类型,并利用函数指针来模仿方法绑定;通过typedef创建新的数据类型以支持抽象数据类型的使用;以及借助宏或链表的技巧实现简单的单重继承机制。这种方法虽然不能达到像C++那样的复杂程度和灵活性,但对于某些特定场合下用C语言模拟面向对象编程是可行且有效的解决方案。 在实践中,开发者可以构造一系列结构体来表示类,并通过函数指针数组来代表方法集;这样每个实例都可以拥有自己的行为定义而不必完全复制代码。此外还可以使用预处理器指令(如宏)来简化继承关系的管理,尽管这需要一些技巧才能处理好细节问题。 总之,虽然C语言缺乏内置的支持面向对象特性的语法结构,但通过创造性地运用其基础特性还是可以实现类似的效果,满足特定项目的需求。
  • Java
    优质
    Java是一种广泛使用的计算机编程语言,支持面向对象的设计思想,具有平台无关性、安全性高等特点,适用于开发跨平台应用。 Java编程语言的风格与C和C++类似。作为一门纯粹面向对象的语言,Java继承了C++的核心面向对象特性,并且放弃了容易引发错误的功能,比如指针(用引用替代)、运算符重载以及多重继承(以接口代替)。此外,Java还引入了一个垃圾回收器来自动管理不再使用的内存空间,这使得开发者无需再为内存问题操心。
  • C#门现代
    优质
    简介:C#是一种现代化且功能强大的编程语言,专为构建企业级应用程序而设计。作为面向对象的语言,它提供了丰富的类库和高效的开发环境,广泛应用于Windows应用开发等领域。 C#是一种面向对象的编程语言,它使程序员能够快速地在Microsoft开发的.NET平台上编写Windows应用程序。.NET平台提供了一系列工具和服务,以最大限度地发挥计算与通信领域的潜力。
  • C模式
    优质
    本课程深入探讨在C语言中实现面向对象编程的概念与技巧,并介绍多种常用的设计模式及其应用场景。 本段落将深入探讨“C语言面向对象编程与设计模式”的核心知识点,并结合实例进行详细解析。 ### C语言与面向对象编程 传统上认为C是一种面向过程的语言,但通过特定技术手段可以在其内实现一些面向对象的概念,如封装、继承和多态。以下分别介绍这些概念及其在C中的应用方式。 #### 封装 封装是指将数据与其操作方法捆绑在一起,并隐藏内部状态与行为。使用结构体(struct)及函数可实现在C中进行封装。例如: ```c typedef struct _music_file { HANDLE hFile; void (*read_file)(struct _music_file *pMusicFile); void (*play)(struct _music_file *pMusicFile); void (*stop)(struct _music_file *pMusicFile); void (*back)(struct _music_file *pMusicFile); void (*front)(struct _music_file *pMusicFile); void (*up)(struct _music_file *pMusicFile); void (*down)(struct _music_file *pMusicFile); } music_file; ``` #### 继承 在C中实现继承的概念较为复杂,通常通过结构体扩展来模拟。这涉及定义一个基类结构体,并在其派生类中包含该基类。 #### 多态 多态性允许使用统一接口表示不同类型的对象。函数指针数组或结构体可以用来实现在C中的多态功能,如上例所示。 ### 设计模式在C语言的应用 设计模式是解决特定问题的模板和指导原则,有助于编写更灵活、可重用及易于维护的代码。接下来介绍几种常见设计模式及其在C语言实现方法: #### 单例模式 单例确保一个类只有一个实例,并提供全局访问点,在C中通常使用静态变量来存储唯一实例以实现此目的。 ```c music_file *get_music_file_instance(void); static music_file *instance = NULL; music_file *get_music_file_instance(void) { if (instance == NULL) { instance = malloc(sizeof(music_file)); 初始化其他成员 } return instance; } ``` 这种做法确保任何时候只有一个`music_file`实例存在。 #### 装饰模式 装饰模式允许动态地给对象添加新功能而不修改其结构。在C中,可利用嵌套的结构体和函数指针实现此目的。 #### 责任链模式 责任链模式使多个处理者有机会处理请求,避免发送者与接收者的直接耦合关系。通过定义一个处理者链表并在其中传递请求直到找到合适的处理器,可以实现在C中的这一模式。 ### 结论 尽管C语言本身不支持面向对象的所有特性,但使用一些巧妙的设计和编码技巧能在其内实现核心的面向对象理念。设计模式的应用不仅提高代码质量和可维护性,还使程序更灵活高效。这对于开发者、架构师及整个开发团队而言极为重要。 在软件开发过程中运用这些技术和模式可以极大地提升产品质量与开发效率。希望本段落能帮助读者更好地理解C语言中的面向对象编程和设计模式的相关知识。
  • 分析_吴晓涵1,pdf,C++,C++
    优质
    《面向对象结构分析与程序设计》是由吴晓涵编著的一本详细介绍面向对象编程原理和技术的教材,涵盖C++语言应用。该书通过实例解析了如何使用C++进行有效的面向对象程序设计,是学习和掌握面向对象技术不可或缺的参考书籍。 面向对象结构分析程序设计课程由同济大学的吴晓涵教授讲授。
  • C实现
    优质
    本文章探讨了如何使用C语言进行面向对象编程的方法和技巧,介绍了结构体、函数指针等概念在模拟类与继承中的应用。适合希望提升C语言编程能力的技术爱好者参考学习。 面向对象编程(OOP)并非一种特定的语言或工具,而是一种设计方法与思想。它主要体现的三个基本特性是封装、继承以及多态性。许多面向对象语言已经包含了这些特性,例如Smalltalk、C++和Java等。但你也可以用几乎所有的编程语言实现面向对象编程,比如ANSI-C。记住,面向对象是一种思维方式和设计方法,并不局限于某种特定的语言。 封装是指将数据与操作该数据的方法组合在一起形成一个类。实际上,许多使用C语言的开发者已经接触过类似的概念了:例如在C的标准库中,函数fopen、fclose、fread以及fwrite等都是对FILE类型的操作对象进行处理的;其中FILE包含了相关的数据内容,而这些函数则提供了读写操作的方法。
  • C(原创)
    优质
    本文探讨了如何在传统的过程式语言C中实现面向对象编程的概念和技巧,包括封装、继承与多态等核心思想的应用方法。 我用C语言编写了一个面向对象框架的内核部分,目前内容仅包含底层核心。本来不打算要币的,但发现自己的币已经没了,所以希望大家能支持一下哈。 ^_^
  • C++数据(第四版)
    优质
    本书为C++编程的经典教材,详细介绍了数据结构和面向对象的设计理念,适合计算机专业学生及程序员阅读。 《数据结构与面向对象程序设计(C++)》第4版附有配套源代码及原版PPT课件。这本书是一本优秀的数据结构教程,学习曲线较为平缓,能够逐步指导读者设计并实现一些STL数据结构,并且习题也很不错。书中对C++的面向对象编程也进行了详细的介绍,对于有一定C语言背景的学习者来说非常易于理解。虽然偶尔会出现排版错误,但这并不影响整体阅读体验。
  • Visual C++及可视(第2版).pdf
    优质
    本书为《Visual C++的面向对象及可视化编程设计》第二版,深入讲解了使用Visual C++进行面向对象和可视化程序设计的方法与技巧,适合初学者和中级开发者阅读。 本书名为《Visual C++面向对象与可视化程序设计(第2版)》,作者为黄维通,资源格式为PDF扫描版,由清华大学出版社出版发行。 全书共分为四篇:Visual C++基础知识、使用API函数进行可视化编程、使用MFC进行可视化编程和Visual C++高级编程。本书从最基本的概念出发,详细地讲述了使用Visual C++ 进行面向对象与可视化程序设计的基础原理与方法,并结合实例对常用的API函数及MFC类进行了介绍。 第一篇介绍了C++基础知识以及Visual C++ 6.0的开发环境、Windows应用程序等内容;第二篇则深入讲解了图形设备接口和绘图工具,文本输出方法与字体设置,键盘鼠标响应等知识;第三篇详细阐述了MFC的基础知识,并对各种标准控件的应用进行了介绍。第四篇则是关于Visual C++高级编程的内容。 本书通俗易懂、重点突出且偏重应用,不仅可以作为大专院校理工科学生的教材,还可以供研究生及科研院所的计算机开发与应用人员参考,同时也可供从事计算机软件开发的专业人员使用。