69pao国产精品视频-久久精品一区二区二三区-精品国产精品亚洲一本大道-99国产综合一区久久

C# 封裝

c# 封裝

封裝 被定義為"把一個或多個項目封閉在一個物理的或者邏輯的包中"。在面向?qū)ο蟪绦蛟O(shè)計方法論中,封裝是為了防止對實現(xiàn)細(xì)節(jié)的訪問。

抽象和封裝是面向?qū)ο蟪绦蛟O(shè)計的相關(guān)特性。抽象允許相關(guān)信息可視化,封裝則使開發(fā)者實現(xiàn)所需級別的抽象。

c# 封裝根據(jù)具體的需要,設(shè)置使用者的訪問權(quán)限,并通過 訪問修飾符 來實現(xiàn)。

一個 訪問修飾符 定義了一個類成員的范圍和可見性。c# 支持的訪問修飾符如下所示:

  • public:所有對象都可以訪問;
  • private:對象本身在對象內(nèi)部可以訪問;
  • protected:只有該類對象及其子類對象可以訪問
  • internal:同一個程序集的對象可以訪問;
  • protected internal:訪問限于當(dāng)前程序集或派生自包含類的類型。

 

1. public 訪問修飾符

public 訪問修飾符允許一個類將其成員變量和成員函數(shù)暴露給其他的函數(shù)和對象。任何公有成員可以被外部的類訪問。

下面的范例說明了這點:

using system;

namespace rectangleapplication
{
? ? class rectangle
? ? {
? ? ? ? //成員變量
? ? ? ? public double length;
? ? ? ? public double width;

? ? ? ? public double getarea()
? ? ? ? {
? ? ? ? ? ? return length * width;
? ? ? ? }
? ? ? ? public void display()
? ? ? ? {
? ? ? ? ? ? console.writeline("長度: {0}", length);
? ? ? ? ? ? console.writeline("寬度: {0}", width);
? ? ? ? ? ? console.writeline("面積: {0}", getarea());
? ? ? ? }
? ? }// rectangle 結(jié)束

? ? class executerectangle
? ? {
? ? ? ? static void main(string[] args)
? ? ? ? {
? ? ? ? ? ? rectangle r = new rectangle();
? ? ? ? ? ? r.length = 4.5;
? ? ? ? ? ? r.width = 3.5;
? ? ? ? ? ? r.display();
? ? ? ? ? ? console.readline();
? ? ? ? }
? ? }
}

當(dāng)上面的代碼被編譯和執(zhí)行時,它會產(chǎn)生下列結(jié)果:

長度: 4.5
寬度: 3.5
面積: 15.75

在上面的范例中,成員變量 length 和 width 被聲明為 public,所以它們可以被函數(shù) main() 使用 rectangle 類的范例 r 訪問。

成員函數(shù) display() 和 getarea() 可以直接訪問這些變量。

成員函數(shù) display() 也被聲明為 public,所以它也能被 main() 使用 rectangle 類的范例 r 訪問。

 

2. private 訪問修飾符

private 訪問修飾符允許一個類將其成員變量和成員函數(shù)對其他的函數(shù)和對象進(jìn)行隱藏。只有同一個類中的函數(shù)可以訪問它的私有成員。即使是類的范例也不能訪問它的私有成員。

下面的范例說明了這點:

using system;

namespace rectangleapplication
{
? ? class rectangle
? ? {
? ? ? ? //成員變量
? ? ? ? private double length;
? ? ? ? private double width;

? ? ? ? public void acceptdetails()
? ? ? ? {
? ? ? ? ? ? console.writeline("請輸入長度:");
? ? ? ? ? ? length = convert.todouble(console.readline());
? ? ? ? ? ? console.writeline("請輸入寬度:");
? ? ? ? ? ? width = convert.todouble(console.readline());
? ? ? ? }
? ? ? ? public double getarea()
? ? ? ? {
? ? ? ? ? ? return length * width;
? ? ? ? }
? ? ? ? public void display()
? ? ? ? {
? ? ? ? ? ? console.writeline("長度: {0}", length);
? ? ? ? ? ? console.writeline("寬度: {0}", width);
? ? ? ? ? ? console.writeline("面積: {0}", getarea());
? ? ? ? }
? ? }//end class rectangle ? ?
? ? class executerectangle
? ? {
? ? ? ? static void main(string[] args)
? ? ? ? {
? ? ? ? ? ? rectangle r = new rectangle();
? ? ? ? ? ? r.acceptdetails();
? ? ? ? ? ? r.display();
? ? ? ? ? ? console.readline();
? ? ? ? }
? ? }
}

當(dāng)上面的代碼被編譯和執(zhí)行時,它會產(chǎn)生下列結(jié)果:

請輸入長度:
4.4
請輸入寬度:
3.3
長度: 4.4
寬度: 3.3
面積: 14.52

在上面的范例中,成員變量 length 和 width 被聲明為 private,所以它們不能被函數(shù) main() 訪問。

成員函數(shù) acceptdetails() 和 display() 可以訪問這些變量。

由于成員函數(shù) acceptdetails() 和 display() 被聲明為 public,所以它們可以被 main() 使用 rectangle 類的范例 r 訪問。

 

3. protected 訪問修飾符

protected 訪問修飾符允許子類訪問它的基類的成員變量和成員函數(shù)。這樣有助于實現(xiàn)繼承。我們將在繼承的章節(jié)詳細(xì)討論這個。更詳細(xì)地討論這個。

 

4. internal 訪問修飾符

internal 訪問說明符允許一個類將其成員變量和成員函數(shù)暴露給當(dāng)前程序中的其他函數(shù)和對象。換句話說,帶有 internal 訪問修飾符的任何成員可以被定義在該成員所定義的應(yīng)用程序內(nèi)的任何類或方法訪問。

下面的范例說明了這點:

using system;

namespace rectangleapplication
{
? ? class rectangle
? ? {
? ? ? ? //成員變量
? ? ? ? internal double length;
? ? ? ? internal double width;
? ? ? ? 
? ? ? ? double getarea()
? ? ? ? {
? ? ? ? ? ? return length * width;
? ? ? ? }
? ? ? ?public void display()
? ? ? ? {
? ? ? ? ? ? console.writeline("長度: {0}", length);
? ? ? ? ? ? console.writeline("寬度: {0}", width);
? ? ? ? ? ? console.writeline("面積: {0}", getarea());
? ? ? ? }
? ? }//end class rectangle ? ?
? ? class executerectangle
? ? {
? ? ? ? static void main(string[] args)
? ? ? ? {
? ? ? ? ? ? rectangle r = new rectangle();
? ? ? ? ? ? r.length = 4.5;
? ? ? ? ? ? r.width = 3.5;
? ? ? ? ? ? r.display();
? ? ? ? ? ? console.readline();
? ? ? ? }
? ? }
}

當(dāng)上面的代碼被編譯和執(zhí)行時,它會產(chǎn)生下列結(jié)果:

長度: 4.5
寬度: 3.5
面積: 15.75

在上面的范例中,請注意成員函數(shù) getarea() 聲明的時候不帶有任何訪問修飾符。如果沒有指定訪問修飾符,則使用類成員的默認(rèn)訪問修飾符,即為 private。

 

5. protected internal 訪問修飾符

protected internal 訪問修飾符允許在本類,派生類或者包含該類的程序集中訪問。這也被用于實現(xiàn)繼承。

下一節(jié):c# 方法

c# 教程

相關(guān)文章