日韩欧美人妻无码精品白浆,www.大香蕉久久网,狠狠的日狠狠的操,日本好好热在线观看

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C#是微軟公司發(fā)布的一種面向?qū)ο蟮?、運行于.NET Framework之上的高級程序設(shè)計語言

admin
2014年5月13日 23:13 本文熱度 8486




C#是微軟公司發(fā)布的一種面向?qū)ο蟮?、運行于.NET Framework之上的高級程序設(shè)計語言。并定于在微軟職業(yè)開發(fā)者論壇(PDC)上登臺亮相。C#是微軟公司研究員Anders Hejlsberg的最新成果。C#看起來與Java有著驚人的相似;它包括了諸如單一繼承、接口、與Java幾乎同樣的語法和編譯成中間代碼再運行的過程。但是C#與Java有著明顯的不同,它借鑒了Delphi的一個特點,與COM(組件對象模型)是直接集成的,而且它是微軟公司 .NET windows網(wǎng)絡(luò)框架的主角。

C#是一種安全的、穩(wěn)定的、簡單的、優(yōu)雅的,由C和C++衍生出來的面向?qū)ο?/A>的編程語言。它在繼承C和C++強大功能的同時去掉了一些它們的復(fù)雜特性(例如沒有以及不允許多重繼承)。C#綜合了VB簡單的可視化操作和C++的高運行效率,以其強大的操作能力、優(yōu)雅的語法風格、創(chuàng)新的語言特性和便捷的面向組件編程的支持成為.NET開發(fā)的首選語言。[1]


C#使得C++程序員可以高效的開發(fā)程序,且因可調(diào)用由 C/C++ 編寫的本機原生函數(shù),因此絕不損失C/C++原有的強大的功能。因為這種繼承關(guān)系,C#與C/C++具有極大的相似性,熟悉類似語言的開發(fā)者可以很快的轉(zhuǎn)向C#。[2]





外文名
C#


別 稱
C SHARP


類 別
面向?qū)ο缶幊陶Z言



發(fā)布時間
2000年6月


發(fā)布單位
微軟公司


開發(fā)者
安德斯·海爾斯伯格





1歷史發(fā)展編輯


C#是微軟公司在2000年6月發(fā)布的一種新的編程語言,主要由安德斯·海爾斯伯格(Anders Hejlsberg)主持開發(fā),它是第一個面向組件的編程語言,其源碼會編譯成msil再運行。它借鑒了Delphi的一個特點,與COM(組件對象模型)是直接集成的,并且新增了許多功能及語法糖,而且它是微軟公司.NET windows網(wǎng)絡(luò)框架的主角。[3]

C#讀作C Sharp。最初它有個更酷的名字,叫做COOL。微軟從1998年12月開始了COOL項目,直到2000年2月,COOL被正式更名為C#。在1998年,Delphi語言的設(shè)計者Hejlsberg帶領(lǐng)著Microsoft公司的開發(fā)團隊,開始了第一個版本C#語言的設(shè)計。在2000年9月,國際信息和通信系統(tǒng)標準化組織為C#語言定義了一個Microsoft公司建議的標準。最終C#語言在2001年得以正式發(fā)布。

原Broland公司的首席研發(fā)設(shè)計師安德斯·海爾斯伯格(An
c#

c#[4]

ders Hejlsberg)在微軟開發(fā)了Visual J++ 1.0,很快的Visual J++由1.1版本升級到6.0版。SUN公司認為Visual J++ 違反了Java開發(fā)平臺的中立性,對微軟提出了訴訟。2000年6月26日微軟在奧蘭多舉行的“職業(yè)開發(fā)人員技術(shù)大會”(PDC 2000)上,發(fā)表新的語言C#。C#語言取代了Visual J++,語言本身深受 Java、C 和 C++ 的影響。[5]

C#是兼顧系統(tǒng)開發(fā)和應(yīng)用開發(fā)的最佳實用語言,并且很有可能成為編程語言歷史上的第一個“全能”型語言??催^這篇簡史,不要把C#看成年輕后生了——只要是“馬拉多納”,就早晚當“球王”。C#1.0,純粹的面向?qū)ο?/A>。[6]

1998年底,微軟正在忙于新一代COM的設(shè)計工作,COM一直是組件化開發(fā)中非常成功的一種技術(shù);但由于它僅提供了二進制層面上的統(tǒng)一,因此無法將類型信息和用于支持基礎(chǔ)平臺和開發(fā)工具的信息放到組件中,Java逐步走向成熟。微軟學(xué)習Java的做法,將虛擬機的概念引入到了COM領(lǐng)域;同時,微軟提出了“元數(shù)據(jù)”的概念,用于描述組件的類型信息和工具支持信息,并決定將其放入到組件當中。[7]

1998年12月,微軟啟動了一個全新的語言項目——COOL,這是一款專門為CLR設(shè)計的純面向?qū)ο蟮恼Z言,也正是本文的主角——C#的前身。[8]

1999年7月份,微軟完成了COOL語言的一個內(nèi)部版本。[8]

2000年2月份,微軟才正式將COOL語言更名為C#。據(jù)說起這個名字是因為C#開發(fā)小組的人很討厭搜索引擎,因此把大部分搜索引擎無法識別的“#”字符作為該語言名字的一部分;還有一種說法是在音樂當中“#”是升調(diào)記號,表達了微軟希望它在C的基礎(chǔ)上更上一層樓的美好愿望——當然這些都只是傳說,無從考證。又是歷經(jīng)了一系列的修改,微軟終于在2000年7月發(fā)布了C#語言的第一個預(yù)覽版。[8]


2設(shè)計目標編輯


C#旨在設(shè)計成為一種“簡單、現(xiàn)代、通用”,以及面向?qū)ο蟮?A target=_blank>程序設(shè)計語言,此種語言的實現(xiàn),應(yīng)提供對于以下軟件工程要素的支持:強類型檢查、數(shù)組維度檢查、未初始化的變量引用檢測、自動垃圾收集(Garbage Collection,指一種自動內(nèi)存釋放技術(shù))。軟件必須做到強大、持久,并具有較強的編程生產(chǎn)力。此種語言為在分布式環(huán)境中的開發(fā)提供適用的組件開發(fā)應(yīng)用。

為使程序員容易遷移到這種語言,源代碼的可移植性十分重要,尤其是對于那些已熟悉C和C++的程序員而言。對國際化的支持非常重要。C#適合為獨立和嵌入式的系統(tǒng)編寫程序,從使用復(fù)雜操作系統(tǒng)的大型系統(tǒng)到特定應(yīng)用的小型系統(tǒng)均適用。[9-10]


3語言結(jié)構(gòu)編輯


:在C#中類的聲明與C++和Java很相似。但是,不象C++,C#結(jié)構(gòu)體
C# Project

C# Project[11]

是不支持繼承。但是,與Java相同的是,一個結(jié)構(gòu)體可以實現(xiàn)接口(interface)。Java的關(guān)鍵字import已經(jīng)被替換成using,它起到了同樣的作用。

類可以是抽象的和不可繼承的:一個被申明成abstract的類不能被實例化,它只能被用做一個基類,C#關(guān)鍵字lock就像Java關(guān)鍵字final,它申明一個類不是抽象的,但是它也不能被用做另一個類的基類界面:就象在Java中一樣,一個界面是一組方法集合的抽象定義。當一個類或結(jié)構(gòu)體實現(xiàn)一個界面的時候,它必須實現(xiàn)這個界面中定義的所有方法。一個單一的類可以實現(xiàn)幾個界面,也許以后會出現(xiàn)一些微妙的差別,但是這個特點看起來與Java相比沒有變化。[12]

Java中,一個接口是一組方法集合的抽象定義.當一個類或結(jié)構(gòu)體實現(xiàn)一個接口的時候,它必須實現(xiàn)這個接口中定義的所有方法.一個單一的類可以實現(xiàn)幾個接口.也許以后會出現(xiàn)一些微妙的差別,但是這個特點看起來與Java相比沒有變化。布爾運算:條件表達式的結(jié)果是布爾數(shù)據(jù)類型,布爾數(shù)據(jù)類型是這種語言中獨立的一種數(shù)據(jù)類型.從布爾類型到其他類型沒有直接的轉(zhuǎn)換過程.布爾常量true和false是C#中的關(guān)鍵字.錯誤處理:如Java中那樣,通過拋出和捕捉異常對象來管理錯誤處理過程.內(nèi)存管理:由底層.NET框架進行自動內(nèi)存垃圾回收。

布爾運算:條件表達式的結(jié)果是布爾數(shù)據(jù)類型,布爾數(shù)據(jù)類型是這種語言中獨立的一種數(shù)據(jù)類型,從布爾類型到其他類型沒有直接的轉(zhuǎn)換過程,布爾常量true和false是C#中的關(guān)鍵字。錯誤處理:如Java中那樣,通過拋出和捕捉異常對象來管理錯誤處理過程。[13]

內(nèi)存管理:由底層.NET框架進行自動內(nèi)存垃圾回收。一個基本的C#類中包含數(shù)據(jù)成員、屬性、構(gòu)造器和方法。屬性可以是靜態(tài)或?qū)嵗蓡T。

接口是其他類型為確保它們支持某些操作而實現(xiàn)的引用類型。接口從不直接創(chuàng)建而且沒有實際的表示形式,其他類型必須轉(zhuǎn)換為接口類型。

一個接口定義一個協(xié)定。實現(xiàn)接口的類或結(jié)構(gòu)必須遵守其協(xié)定。接口可以包含方法、屬性、索引器和事件作為成員。

強類型:C#是一個強類型的語言,它的數(shù)值類型有一些可以進行隱式轉(zhuǎn)換,其他的必須顯式轉(zhuǎn)換,隱式轉(zhuǎn)換的類型只能是長度短的類型轉(zhuǎn)換成長的類型,int可以轉(zhuǎn)換成long、float、double、decimal,反之必須顯式的轉(zhuǎn)換。

編譯:程序直接編譯成標準的二進制可執(zhí)行形式.但C#的源程序并不是被編譯成二進制可執(zhí)行形式,而是一種中間語言(IL),類似于JAVA字節(jié)碼。如果前面的Hello World程序被保存成一個


c#與asp.net權(quán)威指南教程

c#與asp.net權(quán)威指南教程[14]

文本文件并被命名為Hello.cs,它將被編譯成命名Hello.exe的可執(zhí)行程序。

C#程序不能直接編譯成標準的二進制可執(zhí)行形式,與 Java 類似,它被編譯成為中間代碼(Microsoft Intermediate Language),然后通過 .NET Framework 的虛擬機——被稱之為通用語言執(zhí)行層(Common Language Runtime, CLR)——執(zhí)行。

一個C#的結(jié)構(gòu)體與C++的結(jié)構(gòu)體是相似的,因為它能夠包含數(shù)據(jù)聲明和方法.但是,不象C++,C#結(jié)構(gòu)體與類是不同的而且不支持繼承.但是,與Java相同的是,一個結(jié)構(gòu)體可以實現(xiàn)接口。

預(yù)編譯:C# 中存在預(yù)編譯指令支持條件編譯,警告,錯誤報告和編譯行控制.可用的預(yù)編譯指令有:#define,#undef,#if,#elif,#else,#endif,#warning,#error,#line。[15]

沒有了#include偽指令,無法再用#define 語句對符號賦值,所以就不存在源代碼替換的概念--這些符號只能用在#if和#elif偽指令里.在#line偽指令里的數(shù)字(和可選的名字)能夠修改行號還有#warning和#error輸出結(jié)果的文件名。[16]

操作符重載一些操作符能夠被重載,而另一些則不能.特別的是,沒有一個賦值運算符能夠被重載.能夠被重載的單目操作符是:+ - ! ~ ++ -- true false 能夠被重載的二元運算符是:+、 - 、*、 /、 %、 &、 |、 ^、 << 、>>、 ==、 !=、 >、 < 、>= 、<=。[17]

類型C# 中的類型一共分為兩類,一類是值類型(Value Type),一類是引用類型(Reference Type)。值類型和引用類型是以它們在計算機內(nèi)存中是如何被分配的來劃分的。值類型包括 結(jié)構(gòu)和枚舉,引用類型包括類、接口、委托 等。還有一種特殊的值類型,稱為簡單類型(Simple Type),比如 byte,int等,這些簡單類型實際上是FCL類庫類型的別名,比如聲明一個int類型,實際上是聲明一個System. Int32結(jié)構(gòu)類型。因此,在 Int32類型中定義的操作,都可以應(yīng)用在int類型上,比如 “123.Equals(2)”。

所有的值類型都隱式地繼承自System.ValueType類型(注意System.ValueType本身是一個類類型),System.ValueType和所有的引用類型都 繼承自 System.Object基類。不能顯式地讓結(jié)構(gòu)繼承一個類,因為C#不支持多重繼承,而結(jié)構(gòu)已經(jīng)隱式繼承自ValueType。

NOTE堆棧(stack)是一種后進先出的數(shù)據(jù)結(jié)構(gòu),在內(nèi)存中,變量會被分配在堆棧上來進行操作。堆(heap)是用于為類型實例(對象)分配空間的內(nèi)存區(qū)域,在堆上創(chuàng)建一個對象,會將對象的地址傳給堆棧上的變量(反過來叫變量指向此對象,或者變量引用此對象)。[18]

中間代碼微軟在用戶選擇何時MSIL應(yīng)該編譯成機器碼的時候
C#開發(fā)QTP腳本標志

C#開發(fā)QTP腳本標志[19]

是留了很大的余地.微軟公司很小心的聲稱MSIL不是解釋性的,而是被編譯成了機器碼.它也明白許多--如果不是大多數(shù)的話--程序員認為Java程序要不可避免的比C編寫的任何東西都要慢.而這種實現(xiàn)方式?jīng)Q定了基于MSIL的程序(指的是用C#,Visual Basic,"Managed C++"--C++的一個符合CLS的版本--等語言編寫的程序)將在性能上超過"解釋性的"Java代碼.當然,這一點還需要得到事實證明,因為C#和其他生成MSIL的編譯器還沒有發(fā)布.但是Java JIT編譯器的普遍存在使得Java和C#在性能上相對相同.象"C#是編譯語言而Java是解釋性的,"之類的聲明只是商業(yè)技巧.Java的中間代碼和MSIL都是中間的匯編形式的語言,它們在運行時或其它的時候被編譯成機器代碼。[20]


4數(shù)據(jù)類型編輯


基本數(shù)據(jù)類型:C#擁有比C/C++或者Java更廣泛的數(shù)據(jù)類型.這些類型是bool、byte、ubyte、short、ushort、int、uint、long、ulong、float、double和decimal,像Java一樣,所有這些類型都有一個固定的大小.又像C和C++一樣,每個數(shù)據(jù)類型都有有符號和無符號兩種類型.與Java相同的是,一個字符變量包含的是一個16位的Unicode字符,C#新的數(shù)據(jù)類型是decimal數(shù)據(jù)類型,對于貨幣數(shù)據(jù),它能存放28位10進制數(shù)字。[20]

兩個基本類:一個名叫object的類是所有其他類的基類。而一個名叫string的類也象object一樣是這個語言的一部分.作為語言的一部分存在意味著編譯器有可能使用它,無論何時在程序中寫入一句帶引號的字符串,編譯器會創(chuàng)建一個string對象來保存它。[20]

參數(shù)傳遞:方法可以被聲明接受可變數(shù)目的參數(shù).缺省的參數(shù)傳遞方法是對基本數(shù)據(jù)類型進行值傳遞。ref關(guān)鍵字可以用來強迫一個變量通過引用傳遞,這使得一個變量可以接受一個返回值。out關(guān)鍵字也能聲明引用傳遞過程,與ref不同的地方是,它指明這個參數(shù)并不需要初始值。[20]

COM的集成:C#對Windows程序最大的賣點可能就是它與COM的無縫集成了,COM就是微軟的Win32組件技術(shù).實際上,最終有可能在任何.NET語言里編寫COM客戶和服務(wù)器端。C#編寫的類可以子類化一個已存在的COM組件;生成的類也能被作為一個COM組件使用,然后又能使用,比方說,JScript語言子類化它從而得到第三個COM組件。這種現(xiàn)象的結(jié)果是導(dǎo)致了一個運行環(huán)境的產(chǎn)生,在這個環(huán)境里的組件是網(wǎng)絡(luò)服務(wù),可用任何.NET語言子類化。[20]

索引下標:一個索引屬性除了不使用屬性名來引用類成員而是用一個方括號中的數(shù)字來匿名引用(就象用數(shù)組下標一樣)以外是相似的。[20]

代理和反饋:一個代理對象包括了訪問一個特定對象的特定方法所需的信息.只要把它當成一個聰明的方法指針就行了。代理對象可以被移動到另一個地方,然后可以通過訪問它來對已存在的方法進行類型安全的調(diào)用.一個反饋方法是代理的特例.event關(guān)鍵字用在將在事件發(fā)生的時候被當成代理調(diào)用的方法聲明中。[20]


5程序執(zhí)行編輯


C#所開發(fā)的程序源代碼并不是編譯成能夠直接在操作系統(tǒng)上執(zhí)行的二進制本地代碼。與Java類似,它被編譯成為中間代碼,然后通過.NET Framework的虛擬機——被稱之為通用語言運行時(CLR)——執(zhí)行。 所有的.Net編程語言都被編譯成這種被稱為MSIL(Microsoft Intermediate Language )的中間代碼。因此雖然最終的程序在表面上仍然與傳統(tǒng)意義上的可執(zhí)行文件都具有“.exe”的后綴名。但是實際上,如果計算機上沒有安裝.Net Framework,那么這些程序?qū)⒉荒軌虮粓?zhí)行。 在程序執(zhí)行時,.Net Framework將中間代碼翻譯成為二進制機器碼,從而使它得到正確的運行。最終的二進制代碼被存儲在一個緩沖區(qū)中。所以一旦程序使用了相同的代碼,那么將會調(diào)用緩沖區(qū)中的版本。這樣如果一個.Net程序第二次被運行,那么這種翻譯不需要進行第二次,速度明顯加快。[21]


6關(guān)鍵字編輯




























































































abstract

as

base

bool

break

byte

case

catch

char

checked

decimal

default

delegate

continue

double

do

else

enum

ecent

explicit

finally

fixed

float

for

foreach

get

goto

if

implicit

const

in

int

interface

internal

is

lock

long

new

null

object

partial

out

namespace

override

private

ref

readonly

public

return

protected

short

set

stackalloc

sizeof

static

this

struct

throw

try

switch

typeof

uint

unchecked

ulong

unsafe

void

ushort

using

value

virtual

volatile

where

while

yield

class

true

extern

false

sbyte

sealed[22]

部分描述:

abstract:可以和類、方法、屬性、索引器及事件一起使用,標識一個可以擴展但不能被實體化的、必須被實現(xiàn)的類或方法。

as:一個轉(zhuǎn)換操作符,如果轉(zhuǎn)換失敗,就返回null。

base:用于訪問被派生類或構(gòu)造中的同名成員隱藏的基類成員。

catch:定義一個代碼塊,在特定類型異常拋出時,執(zhí)行塊內(nèi)代碼。

checked:既是操作符又是語句,確保編譯器運行時,檢查整數(shù)類型操作或轉(zhuǎn)換時出現(xiàn)的溢出。

const:標識一個可在編譯時計算出來的變量值,即一經(jīng)指派不可修改的值。

delegate:指定一個聲明為一種委托類型。委托把方法封裝為可調(diào)用實體,能在委托實體中調(diào)用。

enum:表示一個已命名常量群集的值類型。

event:允許一個類或?qū)ο筇峁┩ㄖ某蓡T,他必須是委托類型。

explicit:一個定義用戶自定義轉(zhuǎn)換操作符的操作符,通常用來將內(nèi)建類型轉(zhuǎn)換為用戶定義類型或反向操作,必須再轉(zhuǎn)換時調(diào)用顯示轉(zhuǎn)換操作符。

extern:標識一個將在外部(通常不是c#語言)實現(xiàn)的方法。

finally:定義一個代碼塊,在程序控制離開try代碼快后執(zhí)行。參見try和catch。

fixed:在一個代碼塊執(zhí)行時,在固定內(nèi)存位置為一個變量指派一個指針。

foreach:用于遍歷一個群集的元素。

goto:一個跳轉(zhuǎn)語句,將程序執(zhí)行重定向到一個標簽語句。

implicit:一個操作符,定義一個用戶定義的轉(zhuǎn)換操作符,通常用來將預(yù)定義類型轉(zhuǎn)換為用戶定義類型或反向操作,隱式轉(zhuǎn)換操作符必須在轉(zhuǎn)換時使用。

interface:將一個聲明指定為接口類型,即實現(xiàn)類或構(gòu)造必須遵循的合同。

internal:一個訪問修飾符。

namespace:定義一個邏輯組的類型和命名空間。

operator:用來聲明或多載一個操作符。

out:標識一個參數(shù)值會受影響的參數(shù),但在傳入方法時,該參數(shù)無需先初始化。

params:聲明一個參數(shù)數(shù)組。如果使用,必須修改指定的最后一個參數(shù),允許可選參數(shù)。

readonly:標識一個變量的值在初始化后不可修改。

ref:標識一個參數(shù)值可能會受影響的參數(shù)。

sealed:防止類型被派生,防止方法和property被覆載。

sizeof:一個操作符,以byte為單位返回一個值類型的長度。

stackalloc:返回在堆上分配的一個內(nèi)存塊的指針。

struct:是一種值類型,可以聲明常量、字段、方法、property、索引器、操作符、構(gòu)造器和內(nèi)嵌類型。

throw:拋出一個異常。

try:異常處理代碼塊的組成部分之一。try代碼塊包括可能會,拋出異常的代碼。參閱catch和finally關(guān)鍵字。

typeof:一個操作符,返回傳入?yún)?shù)的類型。

unchecked:禁止溢出檢查。

unsafe:標注包含指針操作的代碼塊、方法或類。

using:當用于命名空間時,using關(guān)鍵字允許訪問該命名空間中的類型,而無需指定其全名。也用于定義finalization操作的范圍。

virtual:一個方法修飾符,標識可被覆載的方法。

volatile:標識一個可被操作系統(tǒng)、某些硬件設(shè)備或并發(fā)線程修改的attribute。[22-23]


7版本介紹編輯


C# 1.0-純粹的面向?qū)ο?/B>

在2003年5月,微軟推出了Visual Studio .NET 2003,同時也發(fā)布了C#的改進版本——C# 1.1。[24]


盡管C# 1.x提供了如此多的新鮮概念,但實際上,這些概念都是由CLI提出的。因此當將一個C#源程序編譯為可執(zhí)行文件時,編譯器做的工作相對而言并不多。需要編譯器代勞的是要將一個簡單的委托定義語句翻譯為一個繼承System.MulticastDelegate類型定義。[24]

C# 2.0-泛型編程新概念

微軟在2004年的6月份發(fā)布了Visual Studio2005的第一個Beta 版,同時向開發(fā)者展示了C#語言的2.0版本。2005年4月,微軟發(fā)布了Visual Studio 2005 Beta2,這已經(jīng)是具備了幾乎全部功能的VisualStudio,包括的產(chǎn)品有SQL Server2005、Team Foundation Server和TeamSuite。這時的C#編譯器已經(jīng)能夠處理C# 2.0中所有的新特性。[25]

C# 2.0為開發(fā)者帶來的最主要的特性就是泛型編程能力。和面向?qū)?
Microsoft Visual C# .NET Step by Step

Microsoft Visual C# .NET Step by Step[26]

象思想一樣,泛型思想也是一種已經(jīng)成熟的編程思想,但依然是沒有哪一種主流開發(fā)語言能夠支持完備的泛型概念。這主要是因為泛型的概念在一定程度上對面向?qū)ο蟾拍钸M行沖擊,同時,由于在編譯期間對類型參數(shù)的完全檢測很難做到,很多問題會被遺留到運行時。C# 2.0別出心裁,對泛型類型參數(shù)提出了“約束”的新概念,并以優(yōu)雅的語法體現(xiàn)在語言之中。有了約束,結(jié)合編譯器強大的類型推斷能力,可以在編譯時發(fā)現(xiàn)幾乎所有“危險”的泛型應(yīng)用。[27]

C# 2.0的另一個突出的特性就是匿名方法,用來取代一些短小的并且僅出現(xiàn)一次的委托,使得語言結(jié)構(gòu)更加緊湊。匿名方法除了可以使得事件處理器的編寫更加精簡以外,還將開發(fā)者帶入了程序設(shè)計的一個新的領(lǐng)域——函數(shù)式編程,曾經(jīng)有高人就用匿名方法結(jié)合泛型編程實現(xiàn)了函數(shù)式編程中的重要結(jié)構(gòu)—— Lambda 表達式。盡管這種實現(xiàn)顯得很繁瑣而且不易理解,但畢竟是實現(xiàn)了。

C#3.0-(研發(fā)代號“Orcas”)

2005年9 月份的PDC大會——C#3.0(研發(fā)代號“Orcas”——魔鬼)的技術(shù)預(yù)覽版。說到C# 3.0,就不得不提一下微軟的LINQ 項目,LINQ(語言集成查詢,Language Integrat
c# 本質(zhì)論

c# 本質(zhì)論[28]

ed Query)提出了一種通過面向?qū)ο笳Z法來實現(xiàn)對非面向?qū)ο髷?shù)據(jù)源的查詢技術(shù),可查詢的數(shù)據(jù)源從關(guān)系型數(shù)據(jù)庫延伸到一般意義上的集合(如數(shù)組和列表)以及XML。而C# 3.0則是率先實現(xiàn)了LINQ的語言。

在C# 3.0中,可以用類似于SQL語句的語法從一個數(shù)據(jù)源中輕松地得到滿足一定條件的對象集合。例如要查找一個字符串數(shù)組names中所有長度大于5的字符串,就可以寫:var longname = from n in names wheren.Length > 5 select n;

這樣就得到一個新的字符數(shù)組longname,其中包含了所需要的結(jié)果。這種語句稱作查詢語句,與SQL語句唯一的區(qū)別是C#中的查詢語句往往把select子句放到最后(這反而倒有些類似于中文的閱讀順序了)。初次看到這樣一個語句,可能會有很大疑問:這還是C#語言嗎?這的確是合乎語法規(guī)則的C#代碼,而且編譯器可以識別這種語法。然而實際上,C#編譯器并不會對這種語法進行實際的的編譯,而是將其翻譯為正常的方法調(diào)用。[29-30]

C# 4.0動態(tài)編程

C# 4.0 新增 dynamic關(guān)鍵字,提供動態(tài)編程(dynamic programming),把既有的靜態(tài)物件標記為動態(tài)物件,類似javascript, Python 或 Ruby[31-32] 。


8發(fā)展前景編輯


根據(jù)育龍網(wǎng)資料評價顯示:C#幾乎集中了所有關(guān)于軟件開發(fā)軟件工程研究的最新成果:面向?qū)ο?、類型安全、組件技術(shù)、自動內(nèi)存管理、跨平臺異常處理、版本控制、代碼安全管理……。盡管像很多人注意到的一樣,羅列上述特性時,總是讓人想到JAVA,然而C# 確實走得更遠。但現(xiàn)實的情況是,非技術(shù)的因素往往更能決定一個產(chǎn)品的未來,尤其在計算機軟件的歷史上,技術(shù)卓越的產(chǎn)品,如OS/2、Mac OS、UNIX等,都敗在了Windows漂亮的界面上。JAVA的用戶主要是網(wǎng)絡(luò)服務(wù)的開發(fā)者和嵌入式設(shè)備軟件的開發(fā)者,嵌入式設(shè)備軟件不是C# 的用武之地,而在網(wǎng)絡(luò)服務(wù)方面,C# 的即時編譯和本地代碼Cache方案比JAVA虛擬機具有絕對的性能優(yōu)勢。何況C# 一旦成為一個像C++ 一樣的公共的標準,軟件開發(fā)商既可以省去JAVA的許可證費用,也不必擔心成為微軟的奴隸,那些反微軟的人士和主張廠商獨立的人士可能也不會有什么意見。這可能正是微軟所期待的。[33]

如果把C# 和 JAVA 在網(wǎng)絡(luò)服務(wù)領(lǐng)域的爭奪比作未來制空權(quán)的爭奪,那么C# 和傳統(tǒng)通用快速開發(fā)工具——VB、DELPHI等的較量將是地地道道的白刃戰(zhàn)??赡茏顟K的程序員就是VB程序員,在微軟,VB就像離任的克林頓,不但失去了所有的光輝,而且亂事纏身。[33]

其實在編程語言中真正的霸主多年來一直是C++,所有的操作系統(tǒng)和絕大多數(shù)的商品軟件都是用C++作為主要開發(fā)語言的。JAVA的程序員絕大多數(shù)也是C++的愛好者,PHP的成功里面也有類似C++的語法的功勞。在操作系統(tǒng)、設(shè)備驅(qū)動程序、視頻游戲等領(lǐng)域,C++在很長的時間內(nèi)仍將占據(jù)主要地位,而在數(shù)量最大的應(yīng)用軟件的開發(fā)上,C# 很可能取代C++的位置。首先,C# 和JAVA一樣,簡直就是照搬了C++的部分語法,因此,對于數(shù)量眾多的C++程序員學(xué)習起來很容易上手,另外,對于新手來說,比C++要簡單一些。其次,Windows是占壟斷地位的平臺,而開發(fā)Windows應(yīng)用,當然微軟的聲音是不能忽略的。最重要的是,相對于C++,用C# 開發(fā)應(yīng)用軟件可以大大縮短開發(fā)周期,同時可以利用原來除用戶界面代碼之外的C++代碼。[33]

但是,C# 也有弱點。首先,在一些版本較舊的Windows平臺上,C# 的程序還不能運行,因為C# 程序需要 .NET運行庫作為基礎(chǔ),而 .NET運行庫作為WindowsXP及以后版本)的一部分發(fā)行, Windows Me 和 Windows 2000用戶只能以Service Pack的形式安裝使用。其次,C# 能夠使用的組件或庫還只有 .NET 運行庫等很少的選擇,沒有豐富的第三方軟件庫可用,這需要有一個過程,同時各軟件開發(fā)商的支持也很重要。第三,JAVA的成功因素里有一些是反微軟陣營的吹捧,雖然“只寫一次,到處運行”只是一句口號,但畢竟已經(jīng)是一種成熟的技術(shù)。而C# 的鼓吹者只有名聲不佳的微軟,且只能運行在Windows上。實際上這兩種語言都不是不可替代的,理智的說,對軟件開發(fā)商而言,什么用的最熟什么就是最好的工具。尤其對C++的使用者,C# 沒有帶來任何新東西,因為.NET運行庫在C++中也可以使用,沒有要換的絕對的理由。[33]

C# 將不可避免地崛起,在Windows平臺上成為主角,而JAVA將在UNIX、Linux等平臺上成為霸主,C++ 將繼續(xù)在系統(tǒng)軟件領(lǐng)域大展拳腳。非常有意思的是,這些語言的語法極其接近,因為JAVA和C# 都是由C++發(fā)展而來的。其他的開發(fā)工具當然還會在相當長的時間里繼續(xù)他們的旅程,不過在市場份額上,將不可避免地受到?jīng)_擊。[33]

該文章在 2014/5/13 23:13:39 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調(diào)度、堆場、車隊、財務(wù)費用、相關(guān)報表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務(wù)都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

男人AV天| 国产丰满午夜福利视频| 东京热日韩一二| 综合久久性| 成人在线日韩| 懂色AV午夜高清一区二区| 欧美99热免费| 樱桃少妇综合| 女主播福利视频在线免费| 欧美老太太淫乱视频| 国产无码久久AV中文字幕| 色色色伊人影院| 麻豆av漫画官方网站入口| 欧美日专区一本道| 亚洲综合日本图片区| 久久久就久艹| 国产欧美视频加勒比一区二区三区 | www黄小说在线观看| 国产色欲在线夏晴子| av激情四色| 色就是色呦呦| BT亚洲开心婷婷| 曰屄毛片免费看| 久久ri精品诱惑日韩| 日韩国产伦理久久久| 免费在线无码毛片| 奇米网青青草久久久| 色婷婷五月天亚洲无码| 国产精品~色哟哟| 久久国产淫语中文音声| 美女张开腿秘 免费视频| 一区二qu在线看| 日本三级偷拍久久| 精品久久久免费虎扑影视| 韩国男人天堂| 操逼操操操操操操操操操| 亚洲一区香焦| 欧美精品一区舔| 国产蜜臀AV免费一区二区| 操人妻av蜜桃| av.con黄|