.NET开发正确的学习路线

时间:2024.1.13

.NET开发正确的学习路线

经常有好多初学者在学习之前不知道从何入手,也有好多初学者上来就学,买一本书或几本书看了好几遍, 但是思路还是没有搞通,造成时间的浪费,其实软件开发技术学习路线对于大家来说还是非常重要的,现在我就以我个人的开发经历和教学经验跟大家简单谈谈.NET平台技术学习方法,首先我们来一个总体的学习路线图:

下面我们开始分析一下初学者入门阶段的学习内容和方法:

1.掌握.NET开发环境和C#语言的基础语法。

任何开发语言学习之前都要熟悉开发环境,并且能够自己独立的安装开发环境。在.NET平台当然就是Visual Studio了,版本的话目前建议大家使用VS2010,不要追求高版本。在开发语言上当然选择C#作为入门开发语言学习。C#语言语法简洁,是.NET平台量身定制开发语言,也是微软推荐的,这点大家就不用犹豫了。虽说.NET平台上还有VB.NET、VC++.NET,但是C#是最适合初学者的,而且应用最广。

那么,关于基础语法我们应该学什么呢?具体知识点,我们将在后面的文章中给出一个技能结构图,在这里我需要告诉各位朋友的是,基础语法学习我们只需要研究变量、数据类型、运算符、逻辑控制语句,循环结构、字符串、数组,变量的类型等这些最常用的就可以了。等你使用控制台能够熟练的写出一些语句并顺利的运行成功了,才可以继续学习后面面向对象的相关内容,千万不要一下子就学类与对象这些内容。我看见过好多学员,写了很多程序还不明白类和对象是怎么回事儿,这太痛苦了。基础语法学习阶段就好比我们学自己语言那样,你要首先学会生字、词组、造句、然后试着看图说话,这些都没问题了,你才能自己看一些文章,并且自己创作文章。等你再深入的时候,可以研究文学,出作品了。编程语言也是这个道理。但是很多人就是不懂,我经常看见一些人说,我看着那些代码就头疼。但是我写了这么多年的程序,我感觉着所有的程序都是非常相似的,就那么点东西,但是却能千变万化,很神奇,很有趣味,而且值得研究。你可以这样想想,即使一个人的作品得了诺贝尔文学奖了,他的文章也是用最基本的常用词和语句组成的,你能说你看完了百分之八十的字都不认识吗?肯定不会,那我告诉你,计算机语言也是这样的。在复杂的程序都是由基本的语句组成,只是个别有难点而已。所以,多花力气放在基本的知识学习上,你就找对了方向。

2.学习C#面向对象基础技能。

我们掌握了语法基础,那么面向对象基础又是怎么回事呢?这个问题其实很好回答,就是告诉你这时候你要学习怎么样组织程序的语句,然后以对象的方法把复杂的问题简单化,把你认为枯燥无味的程序逻辑,变成我们日常生活问题思考的方法来实现。好多学员在这个阶段都不能达到这个目标,只会照猫画虎写控

制台程序,然后输出一个结果就完了。我们在讲课中,通常会给大家讲解,面向对象的方法怎么写,非面向对象的方法怎么写,你应该掌握的是面向对象方法,而不是单纯注重结果的输出,不然的话你将来写的程序都是垃圾,因为你用着非常先进的工具,却生产着非常低端的产品,就好像,你买了一辆百万的车,天天跑在泥泞的道路上,估计都没驴车跑的快,你还在那里美滋滋的呢。

那么,我们这个阶段应该掌握哪些内容呢,首先是类与对象的概念、创建与使用方法、封装、属性、方法、集合、文件操作等这些基本内容就可以了,至于说继承、多态、接口这些内容,千万不要上来就学,如果这样我保证你学的很“伤心”,因为这些内容在开发中不是不用,是用的相对少,但是很重要,不过却不适合现在就学习。好多学员说,那为什么教材好多都直接讲呢?我回答是,教材是参考,人家不限制你怎么学,如果你还不明白,那我再举例,你有没有发现你上小学的课文有好多内容不理解,等你长大了,你自然就明白了?为什么?道理很简单,因为你小时候不具备同化那些新知识的基础知识!开发技术也是这个道理,所说你可以上来就学,但是你就是学不好,自己看了那么多书,那么多视频,怎么一遍又一遍,最后发现自己还是那个水平,因为你什么都是概括的学习,没有把精力集中学习简单有用的知识,也就好比我们很多人自己英语词汇量都8千了,怎么还是哑巴英语呢?你知道英国的农民常用的英语单词有多少吗?告诉你8、9百!就这么点儿,就能什么都不耽误了,因为这些词他们非常熟练了,都是日常用语,那么学编程的道理你懂了吗?亲,别再拿着本书来回啃了,没啥意义!

3.学习数据库开发技术。

曾经有学员问,学数据库干什么?那我回答你:你上学学习数学干什么?道理是一样的,计算机软件就是用来处理数据的,我们学习开发语言是写程序,程序工作就要处理数据,哪怕就是一个简单的Excel电子表格也是一个小型的数据库。 所以数据库的学习是非常重要的。而数据库就是程序的数据仓库,我想这个大家都应该明白不多说。

作为C#学习者,我们要学习的数据库肯定就是SQLServer数据库了。当前的主流版本有SQLServer2005/2008,或者更高,对于学习者而言,版本之间几乎差别很小。在这个阶段我要提醒大家的也是不要盲目学,只要你学会使用T-SQL脚本建库、建表、建约束、常用增删改、以及常用查询方法、基本的函数,以及一般的数据库设计方法和简单管理就足够了,你就可以胜任很多项目的数据开发了,初学阶段OK了。真的不要马上就学逻辑控制语句、存储过程、视图、事务、索引、触发器、游标等等这些内容,不然你又要陷入前面学习C#面向对象时的误区了,白白浪费时间,结果是:你看别人的视频都明白,看书也可以,但是自己一动手就跟手不是自己的一样,脑袋也乱,因为你学的太杂乱了。你上学背政治的时候,老师怎么不告诉你,背主要问题点,然后自己扩展,难道学编程你就忘了吗?

4.与数据库的交互技术ADO.NET。

一开始我们学习了C#基础编程,然后又学习了数据库知识,那问题就出来了,数据库怎么和程序交互呢?这就是ADO.NET技术,专门完成这个桥梁作用,是后面我们开发数据库应用程序最重要的一个技术点,如果你学的是java这个阶段的技能点就是JDBC。不同语言,但是方法都是一样的。

我们掌握了数据库访问技术,就可以开始正式编写数据库应用程序了,说白了就是能够自己写点东西,实现一些数据的管理了。那么我们知道用户和数据库交互必须要有界面,没有界面一般用户是不知道怎么写数据操作语句的。这点自从windows操作系统出来后,发生了革命性的的变革,我们的软件必须给用户提供交互界面,这就是我们下面要学的WinForm开发技术。

5.学习WinForm开发技术。

也就是我们所说的桌面应用程序,对于初学者而言winform开发学习效率很高,可以通过这门技术的学习迅速掌握面向对象开发思想和程序编写方法。我见过很多学员,从来没学过winform,上来学做网站,还想做大平台,我说我是没有办法教会你,你以为写程序是炒菜吗?我告诉你炒土豆怎么做,你学会了,然后你马上就说怎么当个大厨师,你说能吗?程序开发也是一样,在最早没有互联网时代WinForm是一统天下的,到现在也没过时,只不过很多web项目可以替代,但是关键的大型项目有时候根本没法替代的,你比如火车站的售票系统,医院的HIS,以及大型企业的ERP系统等等。不要相信那些人鼓吹现在是web和移动互联网的天下,学那个没用,但是你真学好了winform,后面学习web、移动开发技术都是非常容易的!它可以帮你很好的理解面向对象开发思想,让你脱离枯燥、码农的世界,有很多人觉得开发太累,天天写代码,是因为他没有真正的掌握编程思想,就像流水线上的工人那样,天天重复,没有创意,肯定枯燥。而我们的开发技术你学好了,不仅要写代码,关键是要有创造,有思考,有思想,能给别人提供相同问题更好的解决方案!那时候你才是“自由编程”,不然你就??,哎,自己想吧,此处省略1万字?

6.开始小型项目实践。

我们经常说学以致用,理论联系实践,但是有几个能做到随时的实践呢?还是那句话,把教程看了好几遍,买了好几本书,为什么还是“束手无策”?因为缺少实践!这个阶段其实就是对您前面学习技术进行充分的巩固和提高,最起码,我们也得做两个比较完整的项目才能把所学技能巩固好。如果能做到这一点,恭喜你已经入门了,而且后面的内容你会越学越轻松。

好了,前面讲了很多,那么后面我们怎么学习,这里就不多说了,本文文章只是给初学者看的,有了前面的技能,后面的技术点,大家可以参考我写的关于.NET知识结构的文章,而且您也有能力看明白怎么学。您在入门阶段有什么问题,也欢迎您跟我们联系。

摘自:喜科堂


第二篇:学习.NET:NET组件是什么


.NET组件是什么

组件的定义有多种,但最常见有几种。组件是可互换的软件部分,它既是工业化系统的产物,也是工业第系统的动力。在.NET平台的组件层中,组件是以Assemblies的形式创建的。

.NET平台创建了组件,并将组件作为其基本的元素。从本质上看,.NET平台组件是一个用任何.NET语言以插件形式开发的可互换的软件部件,它可以与其他应用程序实现互操作。使用COM+服务的.NET组件被称作服务化组件,以示与.NET中标准的可管理组件的区别。

强命名.NET组件

下面我们将讨论强命名组合体(.NET组件)是什么。当开发可配置类时,它必须被编译。在编译代码后,有二方面的事情需要考虑。第一,COM+集成要求被编译的组合体必须被强命名。我们必须通过运行被称为sn.exe的强命名工具生成一个密码,以生成一个强命名的组合体。一旦编译了强命名的组合体,必须使用System.Reflection名字空间中一个被称作AssemblyKeyFileAttribute的组合体级的属性调用存储在文件中的该密码。

#using

using System;

using System::EnterpriseServices;

using System::Reflection;

[assembly: ApplicationName("FirstApp")]

[assembly: ApplicationActivation(ActivationOption.Library)]

// AssemblyKeyFile属性调用由sn.exe生成的密码文件,组合体将拥有强命名

[assembly: AssemblyKeyFile("thiskeyfile")]

namespace ESExample

{

???

}

第二,在编译强命名的组合体时,必须调用输出System.EnterpriseServices名字空间中类型的组合体━━System.EnterpriseServices.dll。下面是生成密码和编译可配置类的命令:

sn -k thiskeyfile

Cl /out:ThisExample.dll /t:library

/r:System.EnterpriseServices.dll FirstCfgClass.cpp

在COM+中注册.NET组件

COM+有二种注册方式:动态方式和手工方式。这二种方式都相当简单,但对于本例,动态方式是合适的。动态注册方式还有一些要求:

1、组合体必须是强命名的。

2、组合休可以不在全局性的组合体缓冲区中。

3、组合体必须被可管理的(.NET)客户端使用。

4、组合体激活类型必须是Library。

初看起来,似乎限制相当严格,但其实它包括多种情况。读者一定在想,激活类型必须

是Library,但还没有创建过Library COM+组件呢。在.NET中,服务组件的客户端在同一台计算机上,或者客户端将远程访问代理应用程序,以访问COM+组件。因此,纯.NET解决方案将在大多数情况下使用动态注册方式。

在客户端第一次实例化服务化组件时,就会进行动态注册,而且对于每个版本的组合体而言,只会注册一次。我们需要注意COM+目录更新和组件第一次被访问之间在时间上的滞后。代码将跟踪内存中对象的数量以及在一定的活动期间及其之后仍然有多少对象仍然是活动的。

注意,在对对象进行初次调用后,系统中存在一个有5个对象的缓冲池。似乎是一旦一个对象被实例化,在有方法被调用之前,它一直是活动的。一旦有方法被调用,该对象就只在调用期间是活动的。这也提醒我们,在准备使用对象之前,尽量不要去招惹它们。

移植的策略

在决定将部分或全部现有的应用软件移植到.NET环境中,就需要决定哪种移植方法最适合你。本篇文章介绍了水平移植和垂直移植二种应用软件的移植方式。

水平移植和垂直移植

水平移植是指取代应用程序中的全部一个层。例如,可以选择取代基于Web的表示层中的ASP代码或选择取代中间层中的COM代码。垂直移植指的是替换一个应用程序中所有n层中的一部分。

组件设计

本篇文章提出了一些与向.NET/COM移植和组件设计互操作性问题方面的普遍原则。通过互操作层在.NET和 COM环境之间进行互操作时,CCW或RCW(依据调用的方向而不同)必须在二个环境之间的调用栈中对数据进行转化,有些数据类型无需转换。包括整型、长整型和浮点型数据类型在内的通用性数据无需转换,而非通用性数据则需要转换。

Visual Basic的BSTR是非通用性数据类型的一个例子。在向.NET移植应用程序之前,应该在可管理性和非可管理性代码之间尽量少地使用非通用性数据类型,原因是相关的转换代价将影响到应用程序的性能。

通用数据类型

大多数的数据类型在可管理性和非可管理性内存中的表示都相同,互操作层无需作特别的处理,由于在可管理和非可管理代码之间无需转换,因此这些数据类型被称作通用类型。整型和浮点型数据是通用类型数据类型,由通用型数据类型组成的数组和结构也是通用型数据类型。

非通用数据类型

非通用数据类型在可管理和非可管理语言中的表示是不同的,由于当在可管理性和非可管理性代码之间进行互操作时,它们要求互相转换,因此被称作非通用型数据类型。例如,由于有几种不同的非可管理性表示,其中的一些可能需要进行转换,因此,可管理的字符串是非通用型数据类型。字符串、日期、对象是非通用型数据类型的例子,在执行互操作时,它们都需要转换。

现有的COM组件和可管理客户端

在向.NET平台移植应用程序时,需要考虑现有的COM组件所使用的界面。尽管会不再使用现有的COM客户端,仍然会在.NET客户端中使用现有的COM组件。因此,在设计界面时,应该如何既考虑到二种环境中现有的组件也要考虑到未来的可管理客户端。

在向.NET移植组件时,需要使用tlbimp工具自动地生成一个应用程序的RCW。缺省情况下,RCW使用与现有组件相同的界面(通过定义相同和属性和方法)。在许多情况下,传统的COM类型的界面并不是天生地从可管理性代码中使用的。可管理性代码开发人员将能够充分地利用下面的特性:

?参数化的构造器

?继承

?静态方法

我们应当考虑编写一个COM对象使用的自定义包装类,向可管理客户端提供这些能力,创建更适合可管理代码环境的界面。包装类在内部使用COM组件的RCW,并代理对现有COM组件的大多数调用,一些调用能够完成更复杂的数据类型转换工作,例如,ADO .NET数据集和ADO记录集之间的映射。此后,我们可以将更多的功能从COM组件转移到包装类中,而不会影响可管理代码。在决定是使用RCW或自定义的可管理性包装类时,有许多因素需要考虑。需要注意的是,TlbImp工具能够将COM类型库转换为.NET架构元数据。一旦类型库被转换为元数据,可管理客户端可以无缝地调用COM类型。为了简化使用,我们总是在类型库中提供类型信息。

如果组件有大量的已经习惯了现有对象模型的客户端,创建RCW和使用现有的界面就是一个比较合适的策略。Excel中的对象模型被使用VBA的Excel开发人员广泛使用,对象模型是高度结构化的,并且能够很好地映射由Excel提供的特性和用户界面。客户非常熟悉现有的对象模型,如果对象模型发生大幅度的变化,用户就需要进行大量的训练。在本例中,使用标准的RCW可能是合适的。

在编写COM界面的自定义的可管理包装类时,这些界面将被通过RCW从可管理性代码中调用,每个属性调用都需要有互操作层的参与,会带来一定的代价。对于一个只作很少工作的简单界面来说,互操作造成的代价将是30-50条汇编指令。对于完成大量工作的方法而言,这点代价是微不足道的,但对于一个简单的属性访问而言,这一代价还是太大了。

如果在不久之后要将COM组件的客户端移植到.NET平台上,在考虑编写自定义的可管理包装类时,应当将界面的功能由COM组件转到包装类中,否则,可以在COM对象中实现界面,并被代理到可管理的包装类中。

通过重新安排代码,我们能够使互操作层的代价最小,并拥有一个从可管理代码到对象的最简单自然的界面。编写自定义的可管理包装类的带来的另一个好处是可以移动远程对象的分界线。

类的界面的实现

在可管理代码中,类的界面的定义并不是显性的,该界面包含适用于.NET对象使用的所有公共方法、属性、域和事件。它可以是一个双重或者仅起调度作用的界面,类界面的名字为.NET类名字前加一下划线。例如,对于Mammals而言,类界面的名字是_Mammals。对于派生类而言,类界面也需要实现基本类所有的公共方法、域和属性,派生类还实现每个基本类的界面。例如,Mammals类扩展了类MammalMainclass,.NET对象向COM客户端提供三个名字为_Mammals、_MammalMainclass和_Object的界面。

COM客户端能够获得名字为Mammals的类界面,该界面定义在由类型库输出向导(Tlbexp.exe)工具生成的类型库中。如果Mammals类实现一个或多个界面,这些界面将出现在coclass中。

[odl, uuid(0000...0000), hidden, dual, nonextensible, oleautomation]

interface _Mammals : IDispatch

{

[id(0x00000000), propget] HRESULT ToString([out, retval] BSTR*

pRetVal);

[id(0x60020001)] HRESULT Equals([in] VARIANT obj, [out, retval]

VARIANT_BOOL* pRetVal);

[id(0x60020002)] HRESULT GetHashCodes([out, retval] short* pRetVal);

[id(0x60020003)] HRESULT GetType([out, retval] _Type** pRetVal);

[id(0x6002000d)] HRESULT EatIt();

[id(0x6002000e)] HRESULT GetBreathe();

[id(0x6002000f)] HRESULT GoSleep();

}

[uuid(0000...0000)]

coclass Mammals

{

[default] interface _Mammals;

}

类界面生成是可选的。如果没有选择其他选项,COM互操作层为每个输出到类库中的类生成一个只起调度作用的界面,通过在类中添加ClassInterfaceAttribute属性,我们可以中止或修改这一界面的自动创建。尽管类界面能够使我们无须向COM提供可管理类,但其用户还是受到了一定的限制。

主互操作组合体的使用

与其他的.NET组合体不同,互操作组合体不包括有任何实现代码,它只包括有已经在COM组件中实现的类的类型定义。正是从这些类型定义中,CLR生成了RCW,使可管理代码能够在编译时与类型进行绑定,并向CLR提供类型在运行时应当如何进行组织的信息。一个COM类可以生成任意数量的组合体(使用tlbimp是生成互操作组合体的一种方法),但只有一个组合体被称作是主互操作组合体(PIA),PIA中包含有软件开发商对类型的描述,是由开发商签名和授权使用的。由于PIA是由软件开发商签名,并且包含有PrimaryInteropAssembly属性,因此,我们非常容易把它与定义同一个COM类型的其他互操作层区别开来。需要引起注意的是,工程系统会检查指定类库的主互操作组合体是否存在,如果存在,主互操作组合体将被用作COM对象的方法和属性的包装类;如果不存在,则其处理方式将与tlbimp工具指定的相同。

由于可以唯一地标识一个类,主互操作组合体是非常重要的。在由非组件开发商提供的互操作组合体中定义的类型与主互操作组合体中定义的类型是兼容的。例如,考虑如下的情况,如果一个公司中的二名开发人员正在编写与第三方提供的COM组件实现互操作的可管理代码,其中的一个开发人员获得了组件开发商提供的PIA,另一个开发人员则使用tlbimp依据COM对象的类库生成了自己的互操作组合体。只要其中的一位开发人员(甚至是第三方开发人员或客户)不试图向另一个开发人员的代码中传递对象,每个开发人员的代码就没有什么问题。如果出现这种情况,就会出现类型匹配异常。尽管它们表示的是同一个COM对象,但CLR的类型检查功能认为这二个组合体包含着不同的类型。

我们应当获得在应用程序中使用的任意COM组件的PIA,这样有助于阻止由使用相同COM对象在代码编写中出现不兼容的情况。我们也应当提供自己开发、但可能被别人使用的任何组件的PIA,尤其是第三方开发人员或客户要在他们的应用程序中使用这些组件时更是这样。

更多相关推荐:
高效学习法之正确的学习计划制定法

正确的学习计划制定法每天要做的事情写在小字条上做完一件划掉一件哪怕有一件没做完都绝不去睡觉这个习惯坚持了6年很有用而且让我每天都有成就感一位高考状元的话必须明确自己想学的是什么明确自己想要的是什么人的努力其实都...

怎样安排正确的学习计划

怎样安排正确的学习计划学生每天学习的时间是有限的如何合理安排时间大有讲究有些同学忙一阵子数学烦了再看语文累了就看一会电视一晚上下来什么东西也没学到也有些同学认为晚上学习效率高熬夜到三更半夜导致白天疲惫精神不集中...

正确对待你的学习计划

正确对待你的学习计划每逢开学、期中、期末班主任都会让同学们写各种学习计划或者是学习总结,有的同学们常常为此苦恼,觉着自己写不了几个字,交给老师也是敷衍了事,或者上网查找的范文往往太过冗杂,不符合自己的学习情况,…

中学生的学习计划

中学生的学习计划要学习好首先要制定一个切实可行的学习计划用以指导自己的学习古人说凡事预则立不预则废因为有计划就不会打乱仗就可以合理安排时间恰当分配精力基本要点第一要有正确的学习目的每个学生的学习计划都是为了达到...

小学生学习9种不正确的方法 无计划占首位

小学生学习9种不正确的方法无计划占首位如果能注意培养正确的学习方法对孩子成绩的提高可以达到事半功倍的作用下面是总结出来的学生9种不正确的学习方法1学习无计划学习计划是实现学习目标的保证但有些学生对自己的学习毫无...

正确规划高中三年学习生活

正确规划高中三年学习生活准高一必读首先说从初中到高中对我们所有人来说在学习上都要跨上一个台阶而为了顺利地跨越这一台阶那必定是要有足够的思想准备的要以新的而且不同于初中时期的学习方法来学好未来高中的课程一个人确立...

正确认识中层管理者的协作领导力学习计划

正确认识中层管理者的协作领导力学习计划在企业的中层管理人员中对企业的认识是有自身的局限性的在企业的发展中变革是不可避免的很多协作的自组织的系统已经开始在全球范围内进行转变我们认为作为21世纪的中层领导者必须了解...

张静个人学习计划

学生个人学习计划20xx20xx年度第1学期12

十二.五中继教新课程学习计划

十二五中继教新课程学习计划瓮安二中教师黄碧凤继续教育学习是教师不断提高思想素质和综合业务水平学习新理念的教学模式得以正常教学为国家培育新世纪人才的重要途径对于教师个人来说这是一个千载难逢的好机会因此在新学年开始...

留法学习计划

Projetdtude关于学习计划转贴Projetdtude学习计划AprsavoirsuividestudesniveauBac4enGestionsfinanciresl39UniversitdeXXXXj...

电子白板人个学习计划

电子白板培训个人学习计划一指导思想随着课程改革的深入素质教育的全面推进教师现有的文化知识教育思想和教育理念现代教育技术的运用等方面已跟不上高质量的推进素质教育的需要学校立足岗位以集体备课业务学习和课堂教学研究为...

新方法学习计划

新方法学习计划张云在十二五新时期之即新一轮的继续教育工作启动我将按上级主管部门的精神及学校制定的培训计划结合自身实际详细制定新方法个人学习计划如下一指导思想重视理论学习提高认识更新教育观念通过学习树立以人为本以...

正确的学习计划(7篇)