9、C#【進階】特性

特性

在這里插入圖片描述

文章目錄

      • 1、特性概念
      • 2、自定義特性 Attribute
      • 3、特性的使用
      • 4、限制自定義特性的使用范圍
      • 5、系統自帶特性
        • 1、過時特性
        • 2、調用者信息特性
        • 3、條件編譯特性
        • 4、外部dll包函數特性

1、特性概念

特性是一種允許我們向程序的程序集添加元數據的語言結構
它是用于保存程序機構信息的某種特殊類型的類特性本質是個類
可以利用特性類為元數據添加額外信息
比如一個類、成員變量、成員方法等為它們添加更多額外信息
之后可以通過反射來獲取這些額外信息

2、自定義特性 Attribute

繼承特性基類 Attributeclass MyCustomAttribute : Attribute{public string info;public MyCustomAttribute(string info){this.info = info;}public void TestFun(){Console.WriteLine("特性的方法");}}

3、特性的使用

基本語法:
[特性名(參數列表)]
本質上就是在調用特性類的構造函數
寫在類、函數、變量的上一行,表示他們具有該特性信息//特性的使用
MyClass myClass = new MyClass();
Type type = myClass.GetType();//判斷是否使用了某個特性
//參數一:特性的類型
//參數二:代表是否搜索繼承鏈(屬性和事件忽略此參數)
if (type.IsDefined(typeof(MyCustomAttribute), false))
{Console.WriteLine("這個類使用了MyCustom特性");
}//獲取Type元數據中的所有特性
object[] array = type.GetCustomAttributes(true);
for (int i = 0; i < array.Length; i++)
{if (array[i] is MyCustomAttribute){Console.WriteLine((array[i] as MyCustomAttribute).info);(array[i] as MyCustomAttribute).TestFun();}}聲明特性
[MyCustom("類")]
class MyClass
{[MyCustom("成員變量")]public int value;[MyCustom("成員方法")]public void TestFun([MyCustom("函數參數")] int a){}
}

4、限制自定義特性的使用范圍

//通過為特性類 加特性 限制其使用范圍
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, AllowMultiple = true, Inherited = true)]
//參數一:AttributeTargets —— 特性能夠用在哪些地方
//參數二:AllowMultiple —— 是否允許多個特性實例用在同一個目標上
//參數三:Inherited —— 特性是否能被派生類和重寫成員繼承
public class MyCustom2Attribute : Attribute{}

5、系統自帶特性

1、過時特性
//過時特性
//Obsolete
//用于提示用戶 使用的方法等成員已經過時 建議使用新方法
//一般加在函數前的特性class TestClass
{//參數一:調用過時方法時 提示的內容//參數二:true報錯  false警告[Obsolete("OldSpeak方法已經過時了,請使用Speak方法", false)]public void OldSpeak(string str){Console.WriteLine(str);}public void Speak(){}public void SpeakCaller(string str, [CallerFilePath]string fileName = "", [CallerLineNumber]int line = 0, [CallerMemberName]string target = ""){Console.WriteLine(str);Console.WriteLine(fileName);Console.WriteLine(line);Console.WriteLine(target);}
}
2、調用者信息特性
哪個文件調用CallerFilePath特性
哪一行調用CallerLineNumber特性
哪個函數調用CallerMemberName特性//需要引用命名空間 using System.Runtime.CompilerServices;
//一般作為函數參數的特性
3、條件編譯特性
條件編譯特性
Conditional
它會和預處理指令 #define配合使用//需要引用命名空間using System.Diagnostics;
//主要可以用在一些調試代碼上#define Fun
[Conditional("Fun")]
static void Fun(){}
4、外部dll包函數特性
DllImport
用來標記非.Net(C#)的函數,表明該函數在一個外部的DLL中定義。
一般用來調用 C或者C++的Dll包寫好的方法
//需要引用命名空間 using System.Runtime.InteropService[DllImport("Test.dll")]static extern int Add(int a,int b);

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

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

相關文章

【機器學習300問】103、簡單的經典卷積神經網絡結構設計成什么樣?以LeNet-5為例說明。

一個簡單的經典CNN網絡結構由&#xff1a;輸入層、卷積層、池化層、全連接層和輸出層&#xff0c;這五種神經網絡層結構組成。它最最經典的實例是LeNet-5&#xff0c;它最早被設計用于手寫數字識別任務&#xff0c;包含兩個卷積層、兩個池化層、幾個全連接層&#xff0c;以及最…

ansible批量漏洞升級openssh版本

1、ansible宿主機準備好環境&#xff0c;并寫好hosts文件 [rootoxidized ansible]# cat hosts [all] 10.10.200.33 10.10.200.34 10.10.200.35跑playbook之前記得提前發送秘鑰 ssh-copy-id 10.10.200.33/34/352、下載好安裝包&#xff0c;然后編寫yml [rootoxidized ansible]…

【實用的 IDEA 配置和操作技巧總結】

前置知識 IDEA的設置快捷鍵為ctrlalts鍵&#xff0c;后文介紹IDEA常見的配置就不再贅述這一點了。 基礎配置 取消默認打開上次項目 日常開發都會打開不同的項目&#xff0c;初次安裝IDEA之后&#xff0c;每次打開IDEA都會開啟上一次啟動的項目&#xff0c;所以我們需要進入設…

0基礎學習Mybatis系列數據庫操作框架——Mysql的Geometry數據處理之WKB方案

大綱 序列化反序列化完整TypeHandlerSQL XML完整XML Mapper測試代碼代碼 在《0基礎學習Mybatis系列數據庫操作框架——Mysql的Geometry數據處理之WKT方案》中&#xff0c;我們介紹WTK方案的優點&#xff0c;也感受到它的繁瑣和缺陷。比如&#xff1a; 需要借助ST_GeomFromText…

element+ 引入圖標報錯 Failed to resolve import “@element-plus/icons-vue“ from “

element 引入圖標報錯 Internal server error: Failed to resolve import “element-plus/icons-vue” from “src\components\TimeLine.vue”. Does the file exist? 原因&#xff1a;element-plus需要單獨引入 icons 文檔 pnpm install element-plus/icons-vue之后就可以…

350種類型、10W+量級的API,企業應該怎么管?

忽如一夜春風來&#xff0c;萬物皆可API。 在互聯網時代&#xff0c;API無處不在&#xff1a;企業對外開放的數據、服務和業務能力&#xff0c;以API的形式提供給合作方&#xff1b;企業內部應用與應用、App與App之間的通信&#xff0c;通過API進行&#xff1b;甚至應用內部的…

php 連接sqlserver步驟

1.首先要確定使用的是sqlserver的哪個版本&#xff0c;比如sqlserver2012 2.確定服務器是64位還是32位的 3.確認一下使用php的哪個版本&#xff0c;比如php7.1 SQL Server 的 Microsoft PHP 驅動程序 Microsoft Drivers for PHP 支持矩陣 - PHP drivers for SQL Server | Mi…

Flutter 中的 CupertinoTabView 小部件:全面指南

Flutter 中的 CupertinoTabView 小部件&#xff1a;全面指南 在 Flutter 中&#xff0c;CupertinoTabView 是 Cupertino 組件庫中的一個 widget&#xff0c;它用于創建 iOS 風格的標簽頁視圖。這個 widget 通常與 CupertinoTabScaffold 結合使用&#xff0c;提供了一個底部帶有…

怎么做好客戶信息管理?

根據Forrester的調查表示&#xff0c;客戶滿意度的影響可能會使某些行業的收入每年增加高達 10 億美元。而提升客戶滿意度的關鍵環節便是做好客戶信息管理。但企業在進行客戶信息管理中往往會遇到以下問題&#xff1a; 客戶信息亂&#xff1a;客戶信息存在各個 Excel表格、個人…

PMP報考條件怎么查詢?如何判定自己是否符合條件?

PMP報考條件在PMI官網上就可以查詢&#xff0c;PMP報考條件只需要符合項目管理培訓經歷和項目管理經驗兩個方面的要求即可&#xff0c;大家可以對照下方的規定判斷自己是否符合PMP報名條件 PMP報考條件 以下是PMI&#xff08;中國&#xff09;官網對于PMP報名條件的規定&…

優秀的數據分析師需要具備哪些?

在數據驅動的時代&#xff0c;數據分析師的角色越來越被重視。本文將探討優秀數據分析師必備的三大核心能力&#xff0c;并通過實際案例說明如何將這些能力轉化為業務價值&#xff0c;幫助你在職業道路上更進一步。 在數字化迅速發展的今天&#xff0c;數據分析師扮演著極其重要…

ubuntu strace命令

strace 是 Linux 系統中的一個調試工具&#xff0c;用于跟蹤并記錄系統調用&#xff08;system calls&#xff09;和信號&#xff08;signals&#xff09;。在 Ubuntu 中&#xff0c;strace 命令可以幫助開發者和系統管理員了解一個程序在運行時如何與操作系統內核進行交互&…

TypeScript常見面試題第八節

題目三十六:什么是參數解構? 一、講解視頻 TS面試題三十六:什么是參數解構? 二、題目解析 本題目考察 ts 中的解構,解構是一種特殊語法,可以將對象解構到一個或多個局部變量中,可展開操作符相反,展開是允許將一個數組展開為另一個數組,或將一個對象展開為另一個對象,…

vue+antd實踐:在輸入框光標處插入內容

今天來看一個很簡單的需求。 需求描述&#xff1a;在輸入框光標處&#xff0c;插入指定的內容。 效果如下&#xff1a; 實現思路&#xff1a;剛開始還在想怎么獲取光標的位置&#xff0c;但是發現所做的項目是基于vue3antd組件&#xff0c;那么不簡單了嘛&#xff0c;只要調…

JAVA自制小游戲之推箱子

給家里孩子實現益智游戲開發,教會他怎么使用編程。以下是一個簡單的推箱子游戲的Java實現,包含兩個關卡: 這個程序包含兩個關卡,每個關卡都是一個字符串表示的地圖。游戲會提示玩家輸入移動方向(WASD),然后根據輸入的方向移動玩家。如果玩家成功將所有的箱子推到目標位…

配置物聯網平臺 保姆級教程

一、云平臺配置&#xff08;我們這里使用阿里云&#xff09; 1、注冊和登錄 &#xff08;1&#xff09;找到云平臺官網&#xff0c;點擊右上角的注冊登錄&#xff0c;完成之后&#xff0c;進行實名認證&#xff0c;任選一種認證方式。 ??????? 2、實例的開通和創建 …

Scala環境的搭建

要搭建Scala&#xff0c;我們必須先下載java&#xff0c;由于我的電腦已經搭建好了環境&#xff0c;因此我這里用截圖來教大家搭建環境。 可以從網上搜索安裝包對其進行安裝 IntelliJ IDEA – 領先的 Java 和 Kotlin IDE 不建議下載最新版的&#xff0c;大家下載的版本可以下…

本殺小程序開發實戰手冊:從構思到上線

一、引言 隨著移動互聯網的快速發展&#xff0c;劇本殺作為一種新興的娛樂方式&#xff0c;受到了越來越多年輕人的喜愛。為了滿足市場需求&#xff0c;開發一款劇本殺小程序成為了許多創業者和開發者的選擇。本文將從構思、設計、開發到上線等方面&#xff0c;為您詳細解析劇…

第52期|GPTSecurity周報

GPTSecurity是一個涵蓋了前沿學術研究和實踐經驗分享的社區&#xff0c;集成了生成預訓練Transformer&#xff08;GPT&#xff09;、人工智能生成內容&#xff08;AIGC&#xff09;以及大語言模型&#xff08;LLM&#xff09;等安全領域應用的知識。在這里&#xff0c;您可以找…

萬界星空科技定制化MES系統幫助實現數字化生產

由于不同企業的生產流程、需求和目標各異&#xff0c;MES管理系統的個性化和定制化需求也不同。有些企業需要將MES管理系統與ERP等其他管理系統進行集成&#xff0c;以實現全面的信息共享和協同工作。有些企業需要將MES管理系統與SCADA等控制系統進行集成&#xff0c;以實現實時…