C#中使用反射獲取結(jié)構(gòu)體實(shí)例及思路
static void Main(string[] args)
{
Type type = typeof(MyObject);
object obj = type.GetConstructor(Type.EmptyTypes).Invoke(null);
Console.WriteLine(obj);
}
class MyObject
{
}
之前我一直沒有發(fā)現(xiàn)原來結(jié)構(gòu)是不可以這樣實(shí)例化的
換種方式,似乎結(jié)構(gòu)體使用反射無法得到其構(gòu)造函數(shù)ConstructorInfo對(duì)象
類中有一個(gè)隱式的構(gòu)造函數(shù),而結(jié)構(gòu)沒有構(gòu)造函數(shù)
我甚至嘗試查找非public構(gòu)造函數(shù)
依然沒有
這問題一度困擾我很久....解決的方法并不難,所以也沒當(dāng)回事,但今天有個(gè)朋友又問到了這個(gè)問題,所以總結(jié)一下發(fā)出來,給同樣遇到這個(gè)問題的朋友
其實(shí)非常簡(jiǎn)單,只要這樣就可以了
static void Main(string[] args)
{
Type type = typeof(MyStruct);
object obj1 = type.Assembly.CreateInstance(type.FullName);
}
struct MyStruct
{
}
這個(gè)方法說明
Assembly.CreateInstance
使用區(qū)分大小寫的搜索,從此程序集中查找指定的類型,然后使用系統(tǒng)激活器創(chuàng)建它的實(shí)例。
使用這個(gè)方法就不用管class還是struct 都是可以用的,如果是class只要保證有無參構(gòu)造函數(shù)就可以了
這個(gè)方法不是什么高深的玩意兒,主要是給同樣碰到這個(gè)問題的同學(xué)說明一下
======================================================
感謝 KarasCanvas同學(xué),原來C#還有Activator這么一個(gè)類
Activator.CreateInstance(Type)
這樣就可以了
相關(guān)文章
一個(gè)狀態(tài)機(jī)的實(shí)現(xiàn)
本文主要介紹了C#實(shí)現(xiàn)一個(gè)狀態(tài)機(jī)的思路與方法,具有很好的參考價(jià)值,下面跟著小編一起來看下吧2017-02-02C#?使用PrintDocument類打印標(biāo)簽的方法
本文介紹打印機(jī)初步配置,以及實(shí)現(xiàn)方法,標(biāo)簽主要展示資產(chǎn)基本信息以及二維碼,對(duì)C#?使用PrintDocument類打印標(biāo)簽的詳細(xì)過程感興趣的朋友一起看看吧2022-04-04Unity3D實(shí)現(xiàn)模型隨機(jī)切割
這篇文章主要為大家詳細(xì)介紹了Unity3D實(shí)現(xiàn)模型隨機(jī)切割,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-03-03深入解析C#編程中struct所定義的結(jié)構(gòu)
這篇文章主要介紹了C#編程中struct所定義的結(jié)構(gòu),與C++一樣,C#語(yǔ)言同時(shí)擁有類和結(jié)構(gòu),需要的朋友可以參考下2016-01-01