.Net Framework 4/C# 屬性和方法

一、屬性的概述

????????屬性是對實體特征的抽象,用于提供對類或對象的訪問,C# 中的屬性具有訪問器,這些訪問器指定在它們的值被讀取或寫入時需要執行的語句,因此屬性提供了一種機制,用于把讀取和寫入對象的某些特征與一些操作關聯起來。

????????屬性的聲明格式如下:

【訪問修飾符】 【類型】 【屬性名】
{get {get 訪問器體}set {set 訪問器體}
}

????????訪問修飾符:指定屬性的訪問級別;類型:指定屬性的類型,可以是任何預定義或自定義類型;屬性名:一種標識符,而且一般屬性名的第一個字母通常大寫;

????????get 訪問器:相當于一個具有屬性類型返回值的無參數方法,除了作為賦值的目標外,當在表達式中引用屬性時,它將調用該屬性的 get 訪問器獲取屬性的值,get 訪問器體需要用 return 語句來返回,并且所有的 return 語句都必須返回一個可隱式轉換為屬性類型的表達式;

????????set 訪問器:相當于一個具有單個屬性類型值參數和 void 返回類型的方法,set 訪問器的隱式參數始終命名為 value,當一個屬性作為賦值的目標被引用時,就會調用 set 訪問器,所傳遞的參數將提供新值,由于 set 訪問器存在隱式的 value 參數,因此在 set 訪問器中不能自定義名稱為 value 的局部變量或常量;

????????屬性可以分為以下幾種:

  • 可讀可寫屬性:包含 get 訪問器和 set 訪問器
  • 只寫屬性:只包含 set 訪問器
  • 只讀屬性:只包含 get 訪問器

????????屬性的主要用途時限制外部類對類中成員的訪問權限,定義在類級別上,屬性不能作為 ref 參數或 out 參數傳遞。

????????屬性以兩種形式存在:一種時在公共語言運行庫的基類庫中定義的屬性,另一種時可以創建,并可以向代碼中添加附加信息的自定義屬性。

? ? ? ? 例如有:

public class Date
{private int Day = 7;			//定義字段public int day                  //星期屬性,該屬性為可讀可寫{get { return Day; }set {if ((value > 0) && (value < 8)){Day = value;}}}}

????????C# 支持自動實現的屬性,即在屬性的 get 訪問器和 set 訪問器中沒有任何邏輯,而且必須同時擁有get 訪問器和 set 訪問器,例如有:

public int age
{get;set;
}

二、屬性的使用

????????程序中調用屬性的語法格式如下:

????????對象名.屬性名

????????需要注意的是:

  1. 如果要在其它類中調用自定義屬性,必須將自定義屬性的訪問級別設置為 public;
  2. 如果屬性為只讀屬性,不能在調用時為其賦值,否則產生異常。

????????get 訪問器是在取值的時候調用的,set 訪問器是在賦值的時候調用的,利用屬性可以保護字段以及為賦值或者取值添加判斷條件(if)。

三、方法

????????方法在類或結構中聲明,聲明時需要指定訪問級別、返回值、方法名稱及方法參數,方法參數放在括號中,并用逗號隔開,括號中沒有內容表示聲明的方法沒有參數。聲明方法的基本格式如下:

【訪問修飾符】返回值類型 方法名(參數表列)
{//方法的具體實現;
}

????????其中,訪問修飾符可以是 public、private、protected、internal 中的任何一個,也可以省略,如果省略訪問修飾符,則方法的默認訪問級別是 private,即只能在該類中訪問。

????????需要注意的是,一個方法的返回類型和它的形參列表中所引用的各個類型必須至少具有與該方法本身相同的可訪問性。

(一)方法的分類

????????方法分為靜態方法和非靜態方法,靜態方法需要有 static 修飾。

????????靜態成員與 C++ 類似,可參考 C++ 的對象和類中的靜態成員。但也有所區別,例如有:

namespace ClassName
{/** 靜態成員的聲明* 靜態函數的聲明以及對靜態成員和非靜態成員的調用*/public class Person{static int m_A = 10;int m_B = 20;public static void func(int a, int b){Person p = new Person();m_A = a;p.m_B = b;Console.WriteLine("a = " + a);Console.WriteLine("b = " + b);Console.ReadLine();}}}

(二)方法的重載

????????方法重載是指調用同一方法名,但各方法中參數的數據類型、個數或順序不同。

(三)Main 方法

????????Main 方法的默認訪問級別為 private。

(四)方法的參數

????????1、ref 參數(引用傳遞參數)

????????由于 C# 沒有對指針的操作,因此它在使用引用傳遞時,也沒有取址符號“&”,但提供了一個 ref 參數。ref 參數使形參按引用傳遞(即使形參是值類型),其效果是在方法中對形參所在的任何修改都將反映在實參中,如果要使用 ref 參數,則方法聲明和方法調用都必須顯式使用 ref 關鍵字。

????????使用 ref 參數時,需要注意以下幾點:

  1. ref 關鍵字只對跟在它后面的參數有效,而不是應用于整個參數列表;
  2. 在調用 ref 參數之前,一定要進行賦值。
  3. 實參只能是變量,不能是常量或者表達式;
  4. 在調用方法時,必須使用 ref 修飾實參,而且因為是引用參數,所以實參和形參的數據類型必須完全匹配;

????????2、out 參數(定義輸出函數,引用傳遞參數)

?????????out 關鍵字用來定義輸出函數,它會使參數通過引用來傳遞,不同的是 ref 關鍵要求變量必須在傳遞之前進行賦值,而使用 out 關鍵字定義的參數不用進行賦值即可使用,如果要使用 out 參數,則方法聲明和方法調用都必須顯式使用 out 關鍵字。

????????3、params 參數

params 參數可以修飾一個一維數組,用來指定在參數類型相同但數量過多或者不確定時所采用的方法參數。當使用 params 參數時,需要注意以下幾點:

  1. 只能在一維數組中使用 params 參數;
  2. 一個方法最多只能有一個 params 參數。
  3. 不允許使用 ref 關鍵字或者 out 關鍵字修飾 params 參數;

????????例如有:

public int AddNum(params int[] x)
{int res = 0;for (int i = 0; i < x.Length; i++){res += x[i];}return res;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/85841.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/85841.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/85841.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

asp.net mvc如何簡化控制器邏輯

在ASP.NET MVC中&#xff0c;可以通過以下方法簡化控制器邏輯&#xff1a; ASP.NET——MVC編程_aspnet mvc-CSDN博客 .NET/ASP.NET MVC Controller 控制器&#xff08;IController控制器的創建過程&#xff09; https://cloud.tencent.com/developer/article/1015115 【轉載…

flask功能使用總結和完整示例

Flask 功能使用總結與完整示例 一、Flask 核心功能總結 Flask 是輕量級 Web 框架&#xff0c;核心功能包括&#xff1a; 路由系統&#xff1a;通過 app.route 裝飾器定義 URL 與函數的映射。模板引擎&#xff1a;默認使用 Jinja2&#xff0c;支持動態渲染 HTML。請求處理&…

HarmonyOS應用基礎階段- 09、綜合案例-仿攜程旅行口碑榜

文章目錄 攜程-口碑榜1、banner 區域1.1 區域部分1.2 口碑榜 Logo1.3 推薦榜單1.4 評分規則1.5 底部 Line 2、選擇城市和目的地2.1 區域布局2.2 選擇城市2.3 口碑目的地 3、商業選項菜單4、熱門項目選項4.1 區域布局4.2 熱門標題4.3 選項 5、熱門榜標題6、熱門景點列表6.1 區域…

中小制造企業轉型:低成本國產工業軟件替代方案實踐

在數字經濟浪潮席卷全球的當下&#xff0c;制造業數字化轉型已成為企業提升競爭力、實現可持續發展的必由之路。然而&#xff0c;高昂的成本與復雜的技術門檻&#xff0c;卻讓眾多中小制造企業陷入 “不能轉、不想轉、不會轉、不敢轉” 的困局。幸運的是&#xff0c;一批具有自…

Kafka 核心架構與消息模型深度解析(二)

案例實戰&#xff1a;Kafka 在實際場景中的應用 &#xff08;一&#xff09;案例背景與需求介紹 假設我們正在為一個大型電商平臺構建數據處理系統。該電商平臺擁有龐大的用戶群體&#xff0c;每天會產生海量的訂單數據、用戶行為數據&#xff08;如瀏覽、點擊、收藏等&#…

【iOS】cache_t分析

前言 之前分析類的結構的時候&#xff0c;有遇到一個cache_t&#xff0c;當時說是用來保存方法緩存的結構&#xff0c;這篇文章來從源碼詳細介紹一下cache_t 概覽cache_t cache_t結構 類在底層的結構如之前所述&#xff0c;存在著cache_t屬性&#xff0c;而cache_t的結構如下…

java面試題:List如何排序?內存溢出/OOM怎么回事?如何排查和解決?

List如何排序 List排序可以通過實現Comparable接口并且實現compareTo方法&#xff0c;或者傳入comparator去實現排序。 內存溢出/OOM是怎么回事&#xff1f; 內存溢出就是程序在運行的過程中&#xff0c;申請的內存超過了最大內存限制&#xff0c;導致JVM拋出OOM異常&#x…

Python cryptography【密碼庫】庫功能與使用指南

邊寫代碼零食不停口 盼盼麥香雞味塊 、卡樂比&#xff08;Calbee&#xff09;薯條三兄弟 獨立小包、好時kisses多口味巧克力糖、老金磨方【黑金系列】黑芝麻丸 邊寫代碼邊貼面膜 事業美麗兩不誤 DR. YS 野森博士【AOUFSE/澳芙雪特證】377專研美白淡斑面膜組合 優惠劵 別光顧寫…

第二十四章 流程控制_ if分支

第二十四章 流程控制: if分支和輸入 正如許多編程語言一樣Shell也有自己的條件分支語句。有時需要根據情況進行相應的處理&#xff0c;因此可以通過條件分支語句實現&#xff0c;本章主要介紹的是if分支語句。 if語句 在Shell中if語句語法格式如下&#xff1a; if commands…

電腦網絡重置,找不到原先自家的WIFI,手機還能正常連接并上網

問題排查&#xff1a;1、電腦感覺網絡太慢&#xff0c;因此打算點擊了網絡重置 2、點擊提示會刪除網絡&#xff0c;在五分鐘后關機重啟 3、從設備管理器設備的無線wifi屬性-事件中發現刪除記錄 4、選擇更新驅動程序 5、從列表中選取 6、更改回老驅動版本 備選方案&#…

C語言_預處理詳解

1. 預定義符號 C語言設置了一些預定義符號&#xff0c;可以直接使用&#xff0c;預定義符號也是在預處理期間處理的 1 __FILE__ //進行編譯的源文件 2 __LINE__//文件當前的行號 3 __DATE__ //文件被編譯的日期 4 __TIME__//文件被編譯的時間 5 __STDC__//如果編譯器遵循ANSI…

【QT】使用QT幫助手冊找控件樣式

選擇幫助—》輸入stylesheet(小寫)—》選擇stylesheet—》右側選擇Qt Style Sheets Reference 2.使用CtrlF—》輸入要搜索的控件—》點擊Customizing QScrollBar 3.顯示參考樣式表–》即可放入QT-designer的樣式表中

SQL知識合集(二):函數篇

TRIM函數 作用&#xff1a;去掉字符串前后的空格 SELECT * FROM your_table_name WHERE TRIM(column_name) ; COALESCE函數 作用&#xff1a;返回其參數中的第一個非 NULL 值。它可以接受多個參數&#xff0c;并從左到右依次評估這些參數&#xff0c;直到找到第一個非 NUL…

Cursor 工具項目構建指南: Uniapp Miniprogram 環境下的 Prompt Rules 約束

簡簡單單 Online zuozuo: 簡簡單單 Online zuozuo 簡簡單單 Online zuozuo 簡簡單單 Online zuozuo 簡簡單單 Online zuozuo :本心、輸入輸出、結果 簡簡單單 Online zuozuo : 文章目錄 Cursor 工具項目構建指南: Uniapp Miniprogram 環境下的 Prompt Rules 約束前言項目簡…

Java轉Go日記(六十):gin其他常用知識

1. 日志文件 package mainimport ("io""os""github.com/gin-gonic/gin" )func main() {gin.DisableConsoleColor()// Logging to a file.f, _ : os.Create("gin.log")gin.DefaultWriter io.MultiWriter(f)// 如果需要同時將日志寫入…

cocos單例工廠和自動裝配

cocos單例工廠和自動裝配 1 單例工廠 1.1 分析 實例字典 原理很簡單&#xff0c;只是一個map&#xff0c;確保每個類只保留一個實例&#xff1b; private static _instances new Map<string, any>();獲取與存儲實例 這邊使用的方式是生成一個唯一的id存儲在類上&…

django paramiko 跳轉登錄

在使用Django框架結合Paramiko進行SSH遠程操作時&#xff0c;通常涉及到自動化腳本的執行&#xff0c;比如遠程服務器上的命令執行、文件傳輸等。如果你的需求是“跳轉登錄”&#xff0c;即在登錄遠程服務器后&#xff0c;再通過該服務器的SSH連接跳轉到另一臺服務器&#xff0…

《C++初階之類和對象》【命名空間 + 輸入輸出 + 缺省參數 + 函數重載】

【命名空間 輸入&輸出 缺省參數 函數重載】目錄 前言&#xff1a;---------------hello world---------------比較C語言和C的第一個程序&#xff1a;hello word ---------------命名空間---------------什么是命名空間&#xff1f;怎么使用命名空間&#xff1f;怎么定義…

[USACO1.5] 八皇后 Checker Challenge Java

import java.util.*;public class Main {// 標記 對角線1&#xff0c;對角線2&#xff0c;所在x軸 是否存在棋子static boolean[] d1 new boolean[100], d2 new boolean[100], d new boolean[100]; static int n, ans 0;static int[] arr new int[14]; // 記錄一輪棋子位置…

云服務器Xshell登錄拒絕訪問排查

根據你的描述&#xff0c;使用Xshell 8登錄云服務器時顯示“拒絕訪問”&#xff0c;可能涉及多個原因。以下結合搜索結果整理出排查和解決方法&#xff0c;按優先級排序&#xff1a; 一、檢查基礎網絡與端口連通性 本地網絡與服務器IP是否可達 在本地電腦的CMD中執行 ping 服務…