C#-封裝(七)

来源:https://www.cnblogs.com/tynam/archive/2018/09/09/9611267.html
-Advertisement-
Play Games

封裝概念 C#是面向對象的一門語言,面向對象的語言有三大特性:封裝、繼承、多態。而封裝可以實現一個自定義的類,從而定義新的對象 封裝是將一個或多個項目集合在一個單元中,這個單元稱之為類。這樣可以防止對實現細節的訪問 C#封裝可以根據需要通過修飾符實現類成員的範圍和可見性。訪問修飾符有: public ...


封裝概念
  C#是面向對象的一門語言,面向對象的語言有三大特性:封裝、繼承、多態。而封裝可以實現一個自定義的類,從而定義新的對象
  封裝是將一個或多個項目集合在一個單元中,這個單元稱之為類。這樣可以防止對實現細節的訪問
  C#封裝可以根據需要通過修飾符實現類成員的範圍和可見性。訪問修飾符有:
    public:公共的,任何地方都可以訪問,但是需要引用命名空間
    private:私有的,類的內部才可以訪問
    internal:內部的,預設的,程式集中可以訪問,程式集就是命名空間
    protected:被保護的,類的內部和類的父類和子類中可以訪問
    Protected internal :protected和internal的並集,符合任意一條都可以訪問

 

示例

觀察如下代碼

 1 namespace Student
 2 {
 3     class Student
 4     {
 5         public string _code;
 6         public string _sex;
 7         public int _age;
 8     }
 9 
10     class StudentAction
11     {
12         static void Main(string[] args)3         {
14             Student XiaoMing = new Student();
15             XiaoMing._code = "001";
16             XiaoMing._sex = "";
17             XiaoMing._age = 18;
18         }
19     }
20 }

用public修飾的屬性,不夠安全,成員函數可以直接訪問這些變數

用Private 修飾符則允許一個類將其成員變數和成員函數對其他的函數和對象進行隱藏。只有同一個類中的函數可以訪問它的私有成員。

在VS中快速封裝的快捷鍵為:Ctrl+R+E,如下圖:

 

使用prvite後,則函數將不能再對其成員變數訪問,如下圖:

  

需要對外提供一個介面,代碼如下:

 1 namespace StudentSpace
 2 {
 3     class Student
 4     {
 5         private string _code;  //成員變數
 6         private string _sex;
 7         private int _age;
 8 
 9         public string Code  //進行封裝的時候要用public,保證類外可以使用
10         {
11             get
12             {
13                 return _code;   //成員屬性
14             }                  //屬性一般用小寫字母表示,但是封裝的時候首字元要大寫
15 
16             set
17             {
18                 _code = value;
19             }
20         }
21 
22         public string Sex 
23         {
24             get
25             {
26                 return _sex;   //成員屬性
27             }                 
28             set
29             {
30                 _sex = value;
31             }
32         }
33 
34         public int Age  
35         {
36             get
37             {
38                 return _age;   //成員屬性
39             }                  
40 
41             set
42             {
43                 _age = value;
44             }
45         }
46     }    
47 }

主函數調用:

 1 //主函數中調用
 2 class StudentAction
 3 {
 4     static void Main(string[] args)
 5     {
 6         Student XiaoMing = new Student();
 7         XiaoMing.Code = "001";
 8         XiaoMing.Sex = "";
 9         XiaoMing.Age = 18;
10 
11         Console.WriteLine(XiaoMing.Code);
12         Console.WriteLine(XiaoMing.Sex);
13         Console.WriteLine(XiaoMing.Age);
14     }
15 }

主函數執行結果如下:

 

遇到的問題

  在此期間,筆者將namespace與class的名稱都寫成了Student,導致在主函數中調用時直接寫Student報錯誤

  如果是在同一個namespace封裝函數並且調用函數沒有問題

  不在同一個namespace程式就會認為調用的是namespace而不是class,所以報錯,修改方法有兩種:

    1、修改下namespace使兩者的命名不一致;

    2、使用namespace.class調用,將class名稱跟在namespace名稱後面

 

封裝中的set

  在封裝中get 是讀取即屬性取值,set 是賦值即屬性賦值,也就是主函數不能調用_code,而能調用的是Code,但賦值的卻是_code

  在封裝過程中對於學生的性別要有特殊處理,學生的性別要麼是男要麼是女,其他值為非法值,不能允許非法值輸入

  代碼如下: 

 1 public string Sex 
 2         {
 3             get
 4             {
 5                 return _sex;   //成員屬性
 6             }                 
 7             set
 8             {
 9                 if (value == "" || value == "")
10                     _sex = value;
11                 else
12                     _sex = "性別隻能是男或女";
13             }
14         }

  執行主函數:

  

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 過期重磅: 全國電腦等級考試二級 Python 語言程式設計考試大綱 (2018 年版) 考試內容 一、Python語言的基本語法元素 二、基本數據類型 三、程式控制結構 四、函數和代碼復用 五、組合數據類型 六、文件和數據格式化 七、Python計算生態 考試方式 上機考試,考試時長 120 分 ...
  • Redis是一個開源(BSD許可),記憶體存儲的數據結構伺服器,可用作資料庫,高速緩存和消息隊列代理。 有時,為了提升整個網站的性能,在開發時會將經常訪問的數據進行緩存,這樣在調用這個數據介面時,可以提高數據載入的效率 本文將在Boot項目中進行Redis的整合,將常用的數據緩存到Redis伺服器中, ...
  • eclipse安裝hibernate tools 下載地址: https://tools.jboss.org/downloads/jbosstools/photon/4.6.0.Final.html 線上安裝 離線安裝 新建java project後加入對應jar包 新建hibernate.cfg. ...
  • 作者作為一個蒟蒻,也是最近才自學了線段樹,不對的地方歡迎大佬們評論,但是不要噴謝謝 好啦,我們就開始說說線段樹吧 線段樹是個支持區間操作和查詢的東東,平時的話還是蠻實用的 下麵以最基本的區間加以及查詢區間和為例 線段樹顧名思義就是棵樹嘛,葉子節點是每個基本點,它們所對應的父親就是它們的和,具體如下圖 ...
  • 題目:消重輸出 題目介紹: 輸入一個正整數,給出消除重覆數字以後最大的整數,註意需要考慮長整數。 例: 輸入:988274320 輸出:9874320 題目分析:這個結果的實現需要兩個步驟:消重和排序。第一步,消重。先用string 和char 將數字分別儲存進char 數組,然後從左邊第一個字元開 ...
  • 想做自己的微博自媒體,微博大v,剛開始我們肯定要有粉絲才可以,但是我們上哪裡去找粉絲那?花錢買,都是僵屍粉,也就是湊湊數而已,所以我們需要加入互粉群,一個群大概1000人,我們每天關註的人上限大概500個,我們總不能一個一個點進去關註吧,好累的,所以我要批量關註,市面上很多批量關註的軟體不太敢用還是 ...
  • 1、網路三要素及傳輸協議 2、實現UDP協議的發送端和接收端 3、實現TCP協議的客戶端和伺服器 4、TCP上傳文件案例 ...
  • “大菜”:源於自己剛踏入猿途混沌時起,自我感覺不是一般的菜,因而得名“大菜”,於自身共勉。 擴展閱讀: "深入理解值類型和引用類型" 基本概念 string(嚴格來說應該是System.String) 類型是我們日常coding中用的最多的類型之一。那什麼是String呢?^ ~ ^ String是 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...