六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

對(duì)于java 與 c#的區(qū)別及2者有什么不同點(diǎn)

[摘要]關(guān)于java 與 c#的區(qū)別及兩者有什么不同點(diǎn)Java 的設(shè)計(jì)者是因?yàn)橛憛扖++的復(fù)雜,于是Java 非常簡潔,GC 也讓內(nèi)存管理非常方便,C# 是看中了Java 的GC,和虛擬機(jī)技術(shù),希望把微軟的幾大語言集成到.NET 上來。 因此C#從語言上來講并不簡單甚至可以算的上復(fù)雜。Java和C#都是一...

關(guān)于java 與 c#的區(qū)別及兩者有什么不同點(diǎn)

Java 的設(shè)計(jì)者是因?yàn)橛憛扖++的復(fù)雜,于是Java 非常簡潔,GC 也讓內(nèi)存管理非常方便,C# 是看中了Java 的GC,和虛擬機(jī)技術(shù),希望把微軟的幾大語言集成到.NET 上來。 因此C#從語言上來講并不簡單甚至可以算的上復(fù)雜。

JavaC#都是一門面向?qū)ο蟮恼Z言,Java更多地借鑒了C++的優(yōu)點(diǎn),而摒棄了它的一些不太容易被人掌握的知識(shí)點(diǎn)(有些不能說是缺點(diǎn)),并且增加了一些自己的特點(diǎn),而C#則是更多地借鑒了Java的優(yōu)點(diǎn),而增加了一些自己的特點(diǎn)。

兩種語言的設(shè)計(jì)思路也不一樣,Java 是編譯解釋語言,C#是編譯然后編譯運(yùn)行語言。Java 沒有委托,C# 有委托。Java 傾向于用Interface 實(shí)現(xiàn)委托的功能,而 在C# 中,Abstract Class 比Interface 發(fā)揮了更大功能。

Java 遵循camel 命名規(guī)則,C#遵循Pascal 命名規(guī)則。但是如今越來越多的Java 人開始使用C#, 同時(shí)也把camel 命名規(guī)則帶到了C#,這可能會(huì)讓C#代碼越來越難讀。為什么當(dāng)初C#為什么不遵循camel 呢? 我看不出camel 命名規(guī)則有什么不好的。

一. 類名.this 與內(nèi)部類

在 java 中,經(jīng)常看到類似類名.this 的用法,this 就是當(dāng)前對(duì)象實(shí)例,為什么前面會(huì)出現(xiàn)類名呢?對(duì)此 C# 程序員會(huì)很納悶。

在 Java 中,很多地方使用到了內(nèi)部類,甚至可以在在內(nèi)部類中訪問外部類中的成員,這個(gè)時(shí)候,在內(nèi)部類中使用 this 的時(shí)候,就會(huì)出現(xiàn) this 到底是誰的問題,到底是表示內(nèi)部類的當(dāng)前對(duì)象實(shí)例,還是外部類的當(dāng)前對(duì)象實(shí)例問題。

在 Java 中,通過在 this 的前面加上外部類的類名,表示在內(nèi)部類中使用外部類的當(dāng)前對(duì)象實(shí)例。

我們看下面的一個(gè)例子。

package core.sisheng;
 

// 外部類定義
public class OuterClass {
    
    // 內(nèi)部類定義
    private class InnerClass
    {
        // 內(nèi)部類中沒有定義 id 成員,這里訪問外部類中的成員
        public int getId(){    return OuterClass.this.id;    }
        public void setId(int id) { OuterClass.this.id = id;}
    
        // 內(nèi)部類中定義了 name 成員,直接訪問內(nèi)部類中的成員, 默認(rèn) this 訪問當(dāng)前類中的成員
        private String name;
        public String getName() { return this.name;}
        // 可以在 this 的前面加上一個(gè)內(nèi)部類的名稱
        public void setName(String name) { InnerClass.this.name = name;}
        
        // 內(nèi)部類中也可以訪問外部類中同名的成員,需要加上外部類的名稱
        public String getOuterName() { return OuterClass.this.name;}
        public void setOuterName(String name) { OuterClass.this.name = name;}
        
        @Override
        public String toString()
        {
            return "Id: " + this.getId() + ", Inner Name: " + this.getName() + ", Outer Name: " + this.getOuterName();
        }
    }
    
    // 外部類中定義的成員 id 和 name
    private int id;
    private String name;
    
    private InnerClass innerInstance;
    public OuterClass()
    {
        this.innerInstance = new InnerClass();
        this.innerInstance.setId(20);
        this.innerInstance.setName("Tom");
        this.innerInstance.setOuterName("Alice");
    }
    
    public String toString()
    {
        return this.innerInstance.toString();
    }
    
}

在C#中,類區(qū)分為嵌套類和非嵌套類,前者是聲明在其他數(shù)據(jù)類型內(nèi)部的類。后者是直接定義在某一個(gè)命名空間的類。C# 中很少定義嵌套類。
 

非內(nèi)嵌類只允許使用public和internal的訪問控制,而內(nèi)置類則允許使用所有的五種訪問控制符,private, protected , internal protected,public和internal。內(nèi)部類也可以訪問外部類的所有方法,包括instance方法和private方法,但是需要顯式 的傳遞一個(gè)外部類的實(shí)例。

C#中的內(nèi)部類能夠使用外部類定義的類型和靜態(tài)方法,但是不能直接使用外部類的實(shí)例方法,因此,不存在上面的問題。

在C#中,外部類對(duì)于內(nèi)部類的作用更像是一個(gè)命名空間,只要訪問控制允許,就可以使用下面的方法創(chuàng)建內(nèi)部類對(duì)象實(shí)例。

OuterClass.InnerClass  obj = new OuterClass.InnerClass();

這個(gè)實(shí)例與外部類的任何實(shí)例沒有任何直接的關(guān)系。類似于Java中的靜態(tài)內(nèi)部類。

二、類名.class 與類型

在 java 中還經(jīng)常看到類名.class 的用法,這個(gè)用法相當(dāng)于 C# 中的 typeof( 類名 ),用來獲取類型的類型對(duì)象實(shí)例引用。

java中,每個(gè)class都有一個(gè)相應(yīng)的Class對(duì)象,當(dāng)編寫好一個(gè)類,編譯完成后,在生成的.class文件中,就產(chǎn)生一個(gè)Class對(duì)象,用來表示這個(gè)類的類型信息。獲得Class實(shí)例的三種方式:

通過調(diào)用對(duì)象實(shí)例的 getClass() 方法獲取該對(duì)象的Class實(shí)例。

使用Class的靜態(tài)方法forName(),用類的名字獲取一個(gè)Class實(shí)例。Class.forName(xxx.xx.xx) 返回的是一個(gè)類, 作用是要求JVM查找并加載指定的類,也就是說JVM會(huì)執(zhí)行該類的靜態(tài)代碼段。

類名.calss的方式獲取Class實(shí)例,對(duì)基本數(shù)據(jù)類型的封裝類,還可以采用.TYPE來獲取對(duì)應(yīng)的基本數(shù)據(jù)類型的Class實(shí)例。

C# 中獲取類型對(duì)象實(shí)例的方式更加簡單明確一些。

通過調(diào)用數(shù)據(jù)實(shí)例的 GetType() 方法獲取,這個(gè)方法繼承自O(shè)bject,所以C#中任何對(duì)象都具有GetType()方法,x.GetType(),其中x為變量名。

typeof(x)中的x,必須是具體的類名、類型名稱等,不可以是變量名稱。

通過 System.Type 的靜態(tài)方法 System.Type.GetType()。

三、匿名類

在 java 中,匿名類的使用也比較多,比如在 Android 中,實(shí)現(xiàn)按鈕的監(jiān)聽,經(jīng)常會(huì)看到類似這樣的代碼。

this.listener0 = new OnClickListener() {
 

    @Override
    public void onClick(View arg0) {
        Intent intent = new Intent( MainActivity.this, ActivityFrameLayout.class);
        setTitle("FrameLayout");
        startActivity( intent );
    }
};

在這里,OnClickListenter 實(shí)際上是一個(gè)接口,接口能用來創(chuàng)建對(duì)象實(shí)例嗎?當(dāng)然不能。
 

所以,java 在這里自動(dòng)創(chuàng)建一個(gè)實(shí)現(xiàn)接口的匿名類,我們創(chuàng)建出來的實(shí)際上就是這個(gè)匿名類的對(duì)象實(shí)例。

這樣做的好處就是我們沒有必須再定義一個(gè)只使用一次的類,然后再通過這個(gè)類創(chuàng)建對(duì)象實(shí)例,簡化了程序的開發(fā)。

比如,我們有下面的一個(gè)接口。

public interface myInterface {
    void onClick();
}

就可以通過接口創(chuàng)建一個(gè)實(shí)現(xiàn)接口的匿名類的對(duì)象實(shí)例,然后使用這個(gè)對(duì)象實(shí)例。

myInterface instance = new myInterface(){
 

    @Override
    public void onClick()
    {
        System.out.println("Clicked!");
    }
};

instance.onClick();

在 C# 中,我們根本就不會(huì)使用這種形式,通過委托,可以非常簡單地實(shí)現(xiàn)同樣的功能。

注意,java 中是沒有委托的。

如果我們輸出一下這個(gè)實(shí)例的類型,你會(huì)看到這個(gè)匿名類的實(shí)際類型的。

System.out.println( instance.getClass());

//  class core.sisheng.Study1$1
四、屬性(Property)

屬性的概念對(duì)大家來說應(yīng)該是很熟悉的,類成員函數(shù)可以自由地訪問本類中的任何屬性成員。不過若要從一個(gè)類中去訪問另一個(gè)類中的屬性,那就比較麻煩了,所以很多時(shí)候我們使用Getxxx和Setxxx方法,這樣看起來顯得極不自然,比如用Java或者C++,代碼是這樣的:

foo.setSize (getSize () + 1);   
label.getFont().setBold (true);   
但是,在C#中,這樣的方法被“屬性化”了。同樣的代碼,在C#就變成了:   
foo.size++;   
label.font.bold = true;  
    可以看出來,C#顯然更容易閱讀和理解。我們從這個(gè)“屬性方法”的子程序代碼中,也可以看到類似情況:

Java/C++:   
public int getSize()   
{   
return size;   
}   
public void setSize (int value)   
{   
size = value;   
}   
C#:   
public int Size   
{   
 get{return size;}   
 set{size = value;}   
}  
為了區(qū)分這種屬性化的方法和類的屬性成員,在C#中把屬性成員稱作“域(field)”,而“屬性”則成為這種“屬性化的方法”專用的名詞。順便說一句,其實(shí)這樣的屬性化方法在VB和DELPHI中是經(jīng)常碰到的,在VB中它也就叫屬性。另外,在C#中Get和Set必須成對(duì)出現(xiàn),一種屬性不能只有Get而沒有Set(在Java和C++中就可以只有Get或者只有Set),C#中這樣做的好處在于便于維護(hù),假如要對(duì)某種屬性進(jìn)行修改,就會(huì)同時(shí)注意Get和Set方法,同時(shí)修改,不會(huì)改了這個(gè)忘了那個(gè)。

五、對(duì)象索引機(jī)制(Indexer)

C#中引入了對(duì)象索引機(jī)制。說得明白點(diǎn),對(duì)象索引其實(shí)就是對(duì)象數(shù)組。這里和上一節(jié)中的屬性聯(lián)系起來講一下,屬性需要隱藏Get和Set方法,而在索引機(jī)制中,各個(gè)對(duì)象的Get或者Set方法是暴露出來的。比如下面的例子就比較清楚地說明了這一點(diǎn)。以上介紹C#和Java不同點(diǎn)

public class Skyscraper  
{  
 Story[] stories;  
 public Story this [int index] {  
get {  
 return stories [index];  
}  
set {  
 if (value != null) {  
 
stories [index] = value;  
 }  
}  
 }  
...  
} 
以上介紹C#和JAVA得不同點(diǎn),希望對(duì)你了解C#和JAVA有所幫助。

常見的網(wǎng)絡(luò)操作系統(tǒng)有UNIX、Netware、Windows NT、Linux等,網(wǎng)絡(luò)軟件的漏洞及缺陷被利用,使網(wǎng)絡(luò)遭到入侵和破壞。




主站蜘蛛池模板: 四虎激情 | 五月婷婷深深爱 | 香蕉毛片a| 伊人久热这里只有精品视频99 | 日本免费乱理伦片在线观看2018 | 中文字幕第一页国产 | 午夜性福利视频 | 亚洲成a人v欧美综合天堂麻豆 | 天天干天天爽天天射 | 色婷婷九月 | 色综合色综合色综合 | 在线免费色 | 在线观看免费为成年视频 | 全黄性高视频 | 深爱五月网 | 亚洲国产成人久久综合一区77 | 欧美综合国产精品日韩一 | 欧美一区二区久久精品 | 在线看国产人成www免费看下载 | 亚洲欧美自拍视频 | 永久国产| 性高湖久久久久久久久aaaaa | 亚洲第一视频网站 | 色我网站| 日产精品一二三四区国产 | 性调教视频 | 日日摸夜夜添夜夜添一区二区 | 欧美一级视频免费 | 色噜噜狠狠色综合免费视频 | 天堂资源在线中文 | 亚洲男人的天堂在线视频 | 日本一道高清不卡免费 | 一二三四免费影院 | 色先锋资源站 | 青青草原伊人网 | 最近韩国日本免费 | 色天使亚洲 | 天天天天干 | 日日夜夜免费精品视频 | 亚洲欧美久久 | 视频一区二区精品的福利 |