鍍金池/ 教程/ C#/ C#封裝
C#屬性(Properties)
C#與Java比較
C#方法
C#枚舉
C#關(guān)鍵字
C# StreamReader類
C#不安全代碼
C#文件(I/O)
C#匿名方法
C#線程同步
C# Thread類
C#主線程
C#數(shù)據(jù)類型
C# FileStream類
C#預(yù)處理指令
C#繼承
C#循環(huán)
C#決策結(jié)構(gòu)
C#集合
C#反射
C#類型轉(zhuǎn)換
C#泛型
C# StringReader類
C#歷史
C#運(yùn)算符重載
C#屬性
C#線程實(shí)例:Sleep()方法
C#線程示例:優(yōu)先級(jí)
C#線程實(shí)例:Join()方法
C# BinaryReader類
C#類
C#索引器
C# BinaryWriter類
C#序列化
C#常量和文字
C#程序結(jié)構(gòu)
C#封裝
C#事件
C#可空類型(nullable)
C#基本語法
C#異常處理
C#教程
C#接口
C# System.IO命名空間
C#線程命名實(shí)例
C# StringWriter類
C#線程實(shí)例
C#數(shù)組
C#正則表達(dá)式
C#命名空間
C#反序列化
C#與C++比較
C# TextWriter類
C#多線程
C#字符串
C#是什么?
C#變量
C# FileInfo類
C#線程實(shí)例:Abort()方法
C#結(jié)構(gòu)體
C#運(yùn)算符
C#入門程序
C#多線程生命周期
C# TextReader類
C# DirectoryInfo類
C#委托

C#封裝

封裝是一種被定義為在物理或邏輯包中包含一個(gè)或多個(gè)項(xiàng)目的過程。封裝在面向?qū)ο蟮木幊谭椒ㄖ校怯脕碜柚乖L問具體的實(shí)現(xiàn)細(xì)節(jié)。

抽象和封裝是面向?qū)ο缶幊讨械南嚓P(guān)特征。抽象允許相關(guān)信息可見,封裝使程序員能夠?qū)崿F(xiàn)所需的抽象級(jí)別。

封裝通過使用訪問說明符來實(shí)現(xiàn)。訪問說明符定義了一個(gè)類成員的范圍和可見性 C# 支持以下訪問說明符:

  • 公共訪問說明符
  • 私有訪問說明符
  • 受保護(hù)訪問說明符
  • 內(nèi)部訪問說明符
  • 保護(hù)內(nèi)部訪問說明符

公共訪問說明符

公共訪問說明符允許類將成員變量和成員函數(shù)公開到其他函數(shù)和對(duì)象。任何公共會(huì)員都可以從類的外部來訪問。

以下示例說明了這一點(diǎn):

using System;
namespace RectangleApplication
{
    class Rectangle
    {
        //member variables
        public double length;
        public double width;

        public double GetArea()
        {
            return length * width;
        }
        public void Display()
        {
            Console.WriteLine("Length: {0}", length);
            Console.WriteLine("Width: {0}", width);
            Console.WriteLine("Area: {0}", GetArea());
        }
    }//end class Rectangle

    class ExecuteRectangle
    {
        static void Main(string[] args)
        {
            Rectangle r = new Rectangle();
            r.length = 14.5;
            r.width = 10.5;
            r.Display();
            Console.ReadLine();
        }
    }
}

當(dāng)編譯和執(zhí)行上述代碼時(shí),會(huì)產(chǎn)生以下結(jié)果:

Length: 14.5
Width: 10.5
Area: 152.25

在前面的例子中,成員變量:lengthwidth被聲明為public,因此可以使用名為rRectangle類的實(shí)例從Main()函數(shù)訪問它們。

成員函數(shù)Display()GetArea()也可以直接訪問這些變量,而不用通過該類的任何實(shí)例。

成員函數(shù)Display()也被聲明為public,因此也可以使用名為rRectangle類的實(shí)例從Main()訪問它。

私有訪問說明符

私有訪問說明符允許類從其他函數(shù)和對(duì)象中隱藏其成員變量和成員函數(shù)。只有同一個(gè)類的函數(shù)才能訪問其私有成員。即使是類的實(shí)例也無法訪問其私有成員。

以下示例說明了這一點(diǎn):

using System;
namespace RectangleApplication 
{
   class Rectangle
   {
      //member variables
      private double length;
      private double width;

      public void Acceptdetails()
      {
         Console.WriteLine("Enter Length: ");
         length = Convert.ToDouble(Console.ReadLine());
         Console.WriteLine("Enter Width: ");
         width = Convert.ToDouble(Console.ReadLine());
      }
      public double GetArea()
      {
         return length * width;
      }
      public void Display()
      {
         Console.WriteLine("Length: {0}", length);
         Console.WriteLine("Width: {0}", width);
         Console.WriteLine("Area: {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í)行上述代碼時(shí),會(huì)產(chǎn)生以下結(jié)果:

Enter Length:
12.5
Enter Width:
8.25
Length: 12.5
Width: 8.25
Area: 103.125

在前面的例子中,成員變量:lengthwidth被聲明為私有的,所以不能從函數(shù)Main()訪問它們。成員函數(shù)AcceptDetails()Display()可以訪問這些變量。由于成員函數(shù)AcceptDetails()Display()被聲明為public,因此可以使用名為rRectangle類的實(shí)例從Main()訪問它們。

受保護(hù)訪問指定符

受保護(hù)的訪問說明符允許子類訪問其基類的成員變量和成員函數(shù)。這樣就有助于實(shí)現(xiàn)繼承。我們將在后續(xù)章節(jié)中詳細(xì)討論。

內(nèi)部訪問指定符

內(nèi)部訪問說明符允許類將其成員變量和成員函數(shù)公開到當(dāng)前程序集中的其他函數(shù)和對(duì)象。換句話說,具有內(nèi)部訪問說明符的任何成員都可以從定義成員的應(yīng)用程序中定義的任何類或方法訪問。

以下程序說明了這一點(diǎn):

using System;
namespace RectangleApplication
{
    class Rectangle
    {
        //member variables
        internal double length;
        internal double width;

        double GetArea()
        {
            return length * width;
        }
        public void Display()
        {
            Console.WriteLine("Length: {0}", length);
            Console.WriteLine("Width: {0}", width);
            Console.WriteLine("Area: {0}", GetArea());
        }
    }//end class Rectangle

    class ExecuteRectangle
    {
        static void Main(string[] args)
        {
            Rectangle r = new Rectangle();
            r.length = 12.5;
            r.width = 8.25;
            r.Display();
            Console.ReadLine();
        }
    }
}

當(dāng)編譯和執(zhí)行上述代碼時(shí),會(huì)產(chǎn)生以下結(jié)果:

Length: 12.5
Width: 8.25
Area: 103.125

在上面的示例中,請(qǐng)注意,成員函數(shù)GetArea()沒有使用任何訪問說明符聲明。如果沒有使用任何一個(gè)訪問說明符的類成員,它的默認(rèn)訪問說明符是什么呢? 默認(rèn)使用的是私有的。

受保護(hù)內(nèi)部訪問指定符

受保護(hù)的內(nèi)部訪問說明符允許類從其他類對(duì)象和函數(shù)中隱藏其成員變量和成員函數(shù),但同一應(yīng)用程序中的子類除外。這也是在實(shí)現(xiàn)繼承時(shí)要使用的。