C#程序集相關的概念

程序集包含:類型元數據(描述在代碼中定義的每一類型和成員,二進制形式)。程集元數據(程序集清單、版本號、名稱等)、IL代碼(這些都被裝在exe或dll中)、資源文件。每個程序集都有自己的名稱、版本等信息,這些信息可以通過AssemblyInfo.cs文件來自己定義。

獲取一個類的類型 ?person p=new person(); ?Type ?Type=p.getType();

得到一個類的類型 ?Type type=typeof(Person);

獲取一個類型的父類 ? Type ?type=s.GetType().BaseType;

獲取Person類型的所有方法(不包括私有方法)

Person ?p=new Person(); Type ?personType=p.GetType();

MethodInfo[] ? methods=personType.GetMethods();

foreach(var item in methods)

{

Console.Writeline(item.Name);

}

獲取一個類型的屬性:

PropertyInfo[] ?properties=persontype.GetProperties();

遍歷數組的時候返回的類型為PropertyInfo

獲取一個類型的所有字段:FieldInfo[] ?fields=typeof(Person).GetFiels();返回的類型為FieldInfo

獲取一個類中的所有成員:MemberInfo[] ?members=typePerson.GetMembers();遍歷數組時返回的類型為MemberInfo;

通過反射調用方法:(定義的方法沒有參數)

1.獲取一個類的Type

2.獲取我們要找的方法

3.創建一個該類的對象

4.調用方法

Type ?person=typeof(Person);

MethodInfo ?SayHi=peron.GetMethod("SayHi");

object obj=Activator.CreateInstance(person);

SayHi.Invoke(obj,null);

通過反射調用方法(定義的方法有參數)

Type ?person=typeof(Person);

MethodInfo ?info=person.GetMethod("Say",new Type[]{typeof(string),typeof(string)});

object obj=Activivator.CreateInstance(person);

info.Invoke(obj,new obj[]{"大家好","大壞蛋"});

調用一個帶返回值的方法:

Type personType=typeof(Perosn);

MethodInfo info=personType.GetMethod("Add");//Add方法中返回的是一個int類型的方法

object obj=Activator.CreateInstance(personType);

object objreturn=info.Invoke(obj,new object[]{10,20});

動態加載程序集:

Assembly ?asm=Assembly.LoadFile(@"E:\aa\程序集\程序集\ClassLibrary1\bin\Debug\ClassLibrary1.dll")

獲取程序集中所有類型的Type

Type[] ?types=asm.GetTypes();

獲取所有類型的public 類型的Type

Assembly ?adm=Assembly.LoadFile(文件的絕對路徑);

Type[] publictype=adm.GetExportTypes();

獲取指定的類型

Type typePerson=asm.GetType("ClassLibrary1.Person");

判斷一個類型是否可以被另一個類型實例化

typePerson.IsAssignableForm(typeChinese);

考慮是一個類型是否為另一個類型的子類,返回的結果是一個bool類型

typePerson.IsSubclassOf(typeChinese)


歡迎關注我的公眾號(同步更新文章)DoNet技術分享平臺

閱讀原文

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

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

相關文章

linux+刪除亂碼的文件,linux 下刪除亂碼文件-乾頤堂

在linux下刪除文件,遇到特殊字符是一件非常頭疼的事情。1. 如果文件名帶 ‘-’ 或者‘--’這樣的字符刪除辦法為:rm -- 文件名如文件名為:-pythontab.tgz如果用普通方法去刪除:1rm -pythontab.tgz結果錯誤:rm: invalid…

程序員如何保護自己的頸椎

我們程序員天天對著電腦,眼睛,頸椎等等,都會落下不少的職業病。來說說怎么治療自己的頸椎病。1、頸椎病是怎么產生的形成頸椎病的核心原因是:不良生活習慣我們身體的絕大部分疾病都是來自不良的生活習慣,生活習慣不改&…

如何改變XCode的默認設置

改變bundle ID 進入 /Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Project Templates/Application 目錄然后進入各個子目錄(Navigation-based ApplicationOpenGL ES ApplicationSplit View-based ApplicationTab Bar ApplicationUtility ApplicationView-b…

linux關機時循環輸出腳本,Linux關機時執行指定腳本功能實現

1.關機時執行某個腳本的具體思路(1)在文件夾/etc/init.d/下創建關機時需要執行的腳本file_name;(2)分別在文件夾/etc/rc0.d/和/etc/rc6.d/下創建該該腳本文件的鏈接文件K07file_name:sudo ln -s /etc/init.d/file_name /etc/rc0.d/K07file_namesudo ln -…

URI和URL及URN的區別

對于URL,大家都比較熟悉,其他兩個詞就比較陌生了。URI、URL和URN是識別、定位和命名互聯網上的資源的標準途徑。1989年Tim Berners-Lee發明了互聯網(World Wide Web)。WWW被認為是全球互連的實際的和抽象的資源的集合–它按需求提供信息實體–…

Linux基礎-目錄與路徑

今天我們一起來認識下linux中的目錄與路徑及操作其的一些常用命令。 說起路徑就有絕對與相對之分,雖然簡單,我們還是再啰嗦一下: 絕對路徑,從系統的根目錄/開始的目錄都是相對路徑,比如/usr/bin、/usr/local 相對路徑…

螺旋圖形Linux,Canvas 螺旋線幾何圖形繪制

JavaScript語言:JaveScriptBabelCoffeeScript確定window.requestAnimFrame (function() {return window.requestAnimationFrame ||window.webkitRequestAnimationFrame ||window.mozRequestAnimationFrame ||window.oRequestAnimationFrame ||window.msRequestAnim…

28家知名IT公司名稱的由來

28家IT公司名稱由來,你知道嗎?EMC、VMware、IBM、Oracle、NetApp、Citrix、Cisco、Google、Amazon、Alibaba、UCloud、Tencent、Baidu等著名的存儲、備份或云計算行業的IT公司,相信你我都是耳熟能詳,但這些公司的名稱是如何而來的…

編程應該用 Mac ,還是 PC ?

愛編程,不愛修電腦;愛學習,更愛運動;愛科技,也愛娛樂;愛工作,不愛加班。愛幽默、愛生活、愛浪漫、愛打拼,我是程序員,我為自己代言,關注程序員,分…

linux創建虛擬聲卡,Pear BIOS 安裝和配置指引

Pear BIOS 安裝指引Pear BIOS是一套硬件模擬系統,操作系統可以在這套模擬硬件上運行。Pear BIOS可以讓用戶同時安裝多套操作系統,使用時可以選擇任何一套操作系統啟動。在傳統電腦系統上,操作系統可以識別并必須識別硬件;而在這套…

左右值

C/C語言中可以放在賦值符號左邊的變量,即具有對應的可以由用戶訪問的存儲單元,并且能夠由用戶去改變其值的量。左值表示存儲在計算機內存的對象,而不是常量或計算的結果。或者說左值是代表一個內存地址值,并且通過這個內存地址&am…

關于 ASP.NET 內存緩存你需要知道的 10 點

緩存機制的主要目的是提高應用程序的性能。作為 ASP.NET 開發人員,你可能會意識到 ASP.NET Web 窗體以及 ASP.NET MVC 可以使用 Cache 對象緩存應用程序的數據。這通常被稱為服務器端數據緩存,并且常作為框架的內置功能。雖然 ASP.NET Core 中并沒有這樣…

linux git刪除的文件怎么還原,從Git倉庫中恢復已刪除的分支、文件或丟失的commit...

從Git倉庫中恢復已刪除的分支、文件或丟失的commit在使用Git的過程中,有時可能會有一些誤操作比如:執行checkout -f 或 reset -hard 或 branch -d刪除一個分支結果造成本地(遠程)的分支或某些commit丟失可以通過reflog來進行恢復,前提是丟失的…

兩張趣圖助你理解狀態碼的含義~

HTTP狀態碼(HTTP Status Code)是用以表示網頁服務器HTTP響應狀態的3位數字代碼。我們可以通過查看HTTP狀態碼來判斷服務器狀態,常見的有404 、502等;但是其他不是很常見的狀態碼都代表什么狀態呢?下面有兩張有趣的圖片…

java 自定義注解以及獲得注解的值

1.自定義注解 import java.lang.annotation.*;Documented Target(ElementType.FIELD) Inherited Retention(RetentionPolicy.RUNTIME ) public interface MyAnno {/*** 是否能為null* return*/boolean isCanNull() default true;/*** 是否能為空字符串* return*/boolean isCanE…

linux列出管道,lsof列出的管道列表示什么意思?_linux_開發99編程知識庫

文件不僅以流形式打開。 其中一些是在 lsof 手冊中列出的:FD is the File Descriptor number of the file or:cwd current working directory;Lnn library references (AIX);err FD information error (see NAME column);jld jail directory (FreeBSD);ltx shared l…

CSS一些實用的技巧

css 字體簡寫規則當使用css定義字體時你可能會這樣做:font-size: 1em;line-height: 1.5em;font-weight: bold;font-style: italic;font-variant: small-caps;font-family: verdana,serif;事實上你可以簡寫這些屬性:font: 1em/1.5em bold italic small-ca…

linux openssh升級8.1,Centos7利用rpm升級OpenSSH到openssh-8.1p1版本

由于近期安全事故頻發,打算把機器OpenSSH升級到最新版本,找了一圈,發現分享的rpm包就到7.4版本,最新版已經到8.1.p1,所以博客自編譯一個openssh-8.1p1的rpm包進行分享。檢查環境:[roottest]# ssh -VOpenSSH…

《HTTP權威指南》 – 11.驗證碼和新鮮度

服務器應當告知客戶端能夠將內容緩存多長時間,在這個時間內就是新鮮的。服務器可以用這兩個首部之一來提供信息: Expires(過期)Cache - Control(緩存控制)Expires首部 規定文檔“過期”的具體時間&#xff…

產品經理必備神器推薦

歡迎關注我的公眾號(同步更新文章):DoNet技術分享平臺閱讀原文工欲善其事,必先利其器,作為最追求極致體驗的產品經理群體,手里有一件趁手的法器,工作起來才會有一種享受般的快感,最近…