最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C# GetField方法的應(yīng)用實例講解

 更新時間:2024年04月26日 09:49:37   作者:初九之潛龍勿用  
C#中的GetField是一個反射方法,用于獲取指定類型的字段信息,它可以通過字段名稱來獲取字段對象,并且可以在運行時動態(tài)地訪問和操作這些字段,本文給大家介紹了C# GetField方法的應(yīng)用,需要的朋友可以參考下

關(guān)于 C# Type 類

Type表示類型聲明:類類型、接口類型、數(shù)組類型、值類型、枚舉類型、類型參數(shù)、泛型類型定義,以及開放或封閉構(gòu)造的泛型類型。調(diào)用 this.GetType() 方法得到Type對象,可獲取成員信息,如方法名、變量名。更多學(xué)習(xí)請參照以下鏈接:

Type 類 (System) | Microsoft Learn

本文以數(shù)據(jù)采集應(yīng)用實例介紹 Type.GetField 方法的實際應(yīng)用。

GetField 方法應(yīng)用

GetField 是獲取當(dāng)前 Type 的特定方法,我們在這里介紹 GetField(String, BindingFlags) 即使用指定的綁定約束搜索指定的字段變量。

其中 string name 表示要搜索的方法名稱,System.Reflection.BindingFlags 枚舉可見下表:

序號篩選器標(biāo)志說明
1BindingFlags.Instance 或 BindingFlags.Static 必須指定實例或靜態(tài)方可有效返回
2BindingFlags.Public搜索當(dāng)前 Type 中包含的公共方法
3BindingFlags.NonPublic搜索當(dāng)前 Type 中包含的非公共方法 、私有方法、內(nèi)部方法和保護方法
4BindingFlags.FlattenHierarchy在層次結(jié)構(gòu)中的包括 public 和 protected 靜態(tài)成員; private 繼承類中的靜態(tài)成員不包括在層次結(jié)構(gòu)中
5BindingFlags.IgnoreCase忽略方法name的大小寫進行搜索
6BindingFlags.DeclaredOnly如果只搜索 Type 聲明的方法,則搜索只是繼承的方法

應(yīng)用舉例

心理CT設(shè)計題

假設(shè)我們有一組心理測評題目,共計10題,每題有 A、B、C、D、E、F 共計六個單選項,分六個維度進行計分,各初始維度得分均為0,如果符合條件則+1分,該維度如下表:

序號變量名類型說明
1輕躁狂int其特征包括:氣質(zhì)昂揚,愛說、精力充沛、易怒、思維奔逸、抑郁氣短等。 初始值為0
2妄想狂int為了區(qū)分那些被判斷為具有關(guān)系妄想、被害妄想、夸大自我概念、猜疑心、過度地敏感、意見和態(tài)度生硬等偏執(zhí)性人格而制定。初始值為0
3抑郁int抑郁的特征是缺乏干勁,對未來沒有希望,一般對自己的生活狀況極其不滿。 初始值為0
4癔病int癔病的特征是心因性的不隨意肌體機能喪失和機能障礙。 初始值為0
5疑病int其特征是對自己的身體健康的一種過度的關(guān)心,擔(dān)心自己有病或不健康。初始值為0
6精神int其特征包括:思維、感情和行為混亂。初始值為0

初始化代碼如下:

int 輕躁狂=0;
int 妄想狂=0;
int 抑郁=0;
int 癔病=0;
int 疑病=0;
int 精神=0;

基本的設(shè)計如下,通過被測試者對題目的理解,回答其中的選項(單選),則采集后的數(shù)據(jù)拼接為10個字母組合,如下:

string key1="BACCEDFABCD";

其中 key1 字符串即為被測試者的答案。

建立代碼對應(yīng)維度的字典變量        Dictionary<string, string> descript = new Dictionary<string, string>() ,如下代碼:

            descript.Add("A", "輕躁狂");
            descript.Add("B", "妄想狂");
            descript.Add("C", "抑郁");
            descript.Add("D", "癔病");
            descript.Add("E", "疑病");
            descript.Add("F", "精神");

建立 Dictionary<string, int> dpct = new Dictionary<string, int>();  字典變量,用于存儲模型的運算值(每一題均不同),如下代碼:

            dpct.Add("A1", 1);
            dpct.Add("B1", 1);
            dpct.Add("C1", 1);
            dpct.Add("D1", 1);
            dpct.Add("E1", 1);
            dpct.Add("F1", 1);
 
            dpct.Add("A2", 0);
            dpct.Add("B2", 0);
            dpct.Add("C2", 0);
            dpct.Add("D2", 0);
            dpct.Add("E2", 0);
            dpct.Add("F2", 0);
 
            dpct.Add("A3", 0);
            dpct.Add("B3", 1);
            dpct.Add("C3", 0);
            dpct.Add("D3", 0);
            dpct.Add("E3", 0);
            dpct.Add("F3", 1);
 
            dpct.Add("A4", 1);
            dpct.Add("B4", 0);
            dpct.Add("C4", 0);
            dpct.Add("D4", 0);
            dpct.Add("E4", 1);
            dpct.Add("F4", 0);
 
            dpct.Add("A5", 0);
            dpct.Add("B5", 1);
            dpct.Add("C5", 0);
            dpct.Add("D5", 1);
            dpct.Add("E5", 1);
            dpct.Add("F5", 1);
 
            dpct.Add("A6", 1);
            dpct.Add("B6", 1);
            dpct.Add("C6", 1);
            dpct.Add("D6", 0);
            dpct.Add("E6", 1);
            dpct.Add("F6", 0);
 
            dpct.Add("A7", 0);
            dpct.Add("B7", 0);
            dpct.Add("C7", 0);
            dpct.Add("D7", 0);
            dpct.Add("E7", 1);
            dpct.Add("F7", 0);
 
            dpct.Add("A8", 0);
            dpct.Add("B8", 1);
            dpct.Add("C8", 0);
            dpct.Add("D8", 0);
            dpct.Add("E8", 0);
            dpct.Add("F8", 0);
 
            dpct.Add("A9", 1);
            dpct.Add("B9", 1);
            dpct.Add("C9", 0);
            dpct.Add("D9", 1);
            dpct.Add("E9", 1);
            dpct.Add("F9", 1);
 
            dpct.Add("A10", 1);
            dpct.Add("B10", 1);
            dpct.Add("C10", 1);
            dpct.Add("D10", 0);
            dpct.Add("E10", 1);
            dpct.Add("F10", 1);

類設(shè)計

創(chuàng)建一個 DPCT 類用于計算各維度的得分情況,該類設(shè)計如下:

序號成員類型說明
1int 輕躁狂=0;
int 妄想狂=0;
int 抑郁=0;
int 癔病=0;
int 疑病=0;
int 精神=0;
屬性6維度初始值,均為0;
2Dictionary<string, string> descript = new Dictionary<string, string>()屬性用于選項代碼與唯度對應(yīng)的字典
3Dictionary<string, int> dpct = new Dictionary<string, int>(); 屬性存儲每題答案對應(yīng)的計算得分
4string key1="";方法接收用戶的答案組合字符串
5public string countScrore()方法計算各維度變量的得分

DPCT類實現(xiàn)代碼

完整的DPCT類示例代碼如下:

public class DPCT
{
    int 輕躁狂=0;
    int 妄想狂=0;
    int 抑郁=0;
    int 癔病=0;
    int 疑病=0;
    int 精神=0;
 
    public string key1 = "";
 
    Dictionary<string, string> descript = new Dictionary<string, string>();
    Dictionary<string, int> dpct = new Dictionary<string, int>();
 
    public DPCT()
    {
            descript.Add("A", "輕躁狂");
            descript.Add("B", "妄想狂");
            descript.Add("C", "抑郁");
            descript.Add("D", "癔病");
            descript.Add("E", "疑病");
            descript.Add("F", "精神");
 
            dpct.Add("A1", 1);
            dpct.Add("B1", 1);
            dpct.Add("C1", 1);
            dpct.Add("D1", 1);
            dpct.Add("E1", 1);
            dpct.Add("F1", 1);
 
            dpct.Add("A2", 0);
            dpct.Add("B2", 0);
            dpct.Add("C2", 0);
            dpct.Add("D2", 0);
            dpct.Add("E2", 0);
            dpct.Add("F2", 0);
 
            dpct.Add("A3", 0);
            dpct.Add("B3", 1);
            dpct.Add("C3", 0);
            dpct.Add("D3", 0);
            dpct.Add("E3", 0);
            dpct.Add("F3", 1);
 
            dpct.Add("A4", 1);
            dpct.Add("B4", 0);
            dpct.Add("C4", 0);
            dpct.Add("D4", 0);
            dpct.Add("E4", 1);
            dpct.Add("F4", 0);
 
            dpct.Add("A5", 0);
            dpct.Add("B5", 1);
            dpct.Add("C5", 0);
            dpct.Add("D5", 1);
            dpct.Add("E5", 1);
            dpct.Add("F5", 1);
 
            dpct.Add("A6", 1);
            dpct.Add("B6", 1);
            dpct.Add("C6", 1);
            dpct.Add("D6", 0);
            dpct.Add("E6", 1);
            dpct.Add("F6", 0);
 
            dpct.Add("A7", 0);
            dpct.Add("B7", 0);
            dpct.Add("C7", 0);
            dpct.Add("D7", 0);
            dpct.Add("E7", 1);
            dpct.Add("F7", 0);
 
            dpct.Add("A8", 0);
            dpct.Add("B8", 1);
            dpct.Add("C8", 0);
            dpct.Add("D8", 0);
            dpct.Add("E8", 0);
            dpct.Add("F8", 0);
 
            dpct.Add("A9", 1);
            dpct.Add("B9", 1);
            dpct.Add("C9", 0);
            dpct.Add("D9", 1);
            dpct.Add("E9", 1);
            dpct.Add("F9", 1);
 
            dpct.Add("A10", 1);
            dpct.Add("B10", 1);
            dpct.Add("C10", 1);
            dpct.Add("D10", 0);
            dpct.Add("E10", 1);
            dpct.Add("F10", 1);
      }
   public string countScrore() 
   {
         for (int i = 0; i < key1.Length; i++)
         {
            string anwser = key1.Substring(i, 1);
            string varname = descript[anwser];
            FieldInfo fi=this.GetType().GetField(varname, BindingFlags.NonPublic| BindingFlags.Instance);
            fi.SetValue(this, (int)fi.GetValue(this) + dpct[anwser+(i+1).ToString()]);
         }
   }
}
 

countScore 核心方法取出每一個答案選項字母,根據(jù)代碼與維度對應(yīng)關(guān)系,取出要計算值的變量名稱字符串,然后通過GetField方法查找到變量,并根據(jù)模型添加分值。

其基本設(shè)計如下圖所示:

調(diào)用 GetField 方法 得到 FieldInfo 對象,然后 FieldInfo 對象再執(zhí)行 SetValue 和 GetValue 方法執(zhí)行增加值操作。

小結(jié)

到此這篇關(guān)于C# GetField方法的應(yīng)用實例講解的文章就介紹到這了,更多相關(guān)C# GetField方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C# 語音功能的實現(xiàn)方法

    C# 語音功能的實現(xiàn)方法

    最近看了一些資料,是c#實現(xiàn)語音功能的?,F(xiàn)在就簡單的講一下怎么實現(xiàn)。
    2013-03-03
  • C#圖書管理系統(tǒng) 附源碼下載

    C#圖書管理系統(tǒng) 附源碼下載

    這篇文章主要為大家詳細(xì)介紹了C#圖書管理系統(tǒng),文章中附源碼下載,示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • C#實現(xiàn)Xml序列化與反序列化的方法

    C#實現(xiàn)Xml序列化與反序列化的方法

    這篇文章主要介紹了C#實現(xiàn)Xml序列化與反序列化的方法,將序列化與反序列化的方法封裝入一個類文件中,包含了較為詳盡的注釋說明,非常具有實用價值,需要的朋友可以參考下
    2014-12-12
  • C#中winform控制textbox輸入只能為數(shù)字的方法

    C#中winform控制textbox輸入只能為數(shù)字的方法

    這篇文章主要介紹了C#中winform控制textbox輸入只能為數(shù)字的方法,包括使用keyPress事件限制鍵盤輸入以及TextChanged事件限制粘貼等情況,來實現(xiàn)控制輸入為數(shù)字的功能,需要的朋友可以參考下
    2015-01-01
  • C#實現(xiàn)串口通信的四種靈活策略和避坑指南

    C#實現(xiàn)串口通信的四種靈活策略和避坑指南

    這篇文章主要為大家詳細(xì)介紹了C#實現(xiàn)串口通信的四種靈活策略和避坑的相關(guān)知識,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2026-01-01
  • C#多線程系列之線程完成數(shù)

    C#多線程系列之線程完成數(shù)

    本文詳細(xì)講解了C#多線程中的線程完成數(shù),文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • 舉例講解C#中自動實現(xiàn)的屬性

    舉例講解C#中自動實現(xiàn)的屬性

    這篇文章主要介紹了C#中自動實現(xiàn)的屬性,包括使用自動實現(xiàn)的屬性實現(xiàn)輕量類的方法,需要的朋友可以參考下
    2016-01-01
  • 淺析如何使用C#實現(xiàn)在Excel中創(chuàng)建下拉列表

    淺析如何使用C#實現(xiàn)在Excel中創(chuàng)建下拉列表

    在日常的數(shù)據(jù)管理和分析中,Excel 扮演著不可或缺的角色,本文將為您介紹如何利用 C# 編程語言和強大的第三方庫 Spire.XLS for .NET,自動化地在 Excel 中創(chuàng)建各種類型的下拉列表,感興趣的小伙伴可以了解下
    2025-11-11
  • 重溫C# clr 筆記總結(jié)

    重溫C# clr 筆記總結(jié)

    本篇文章是對以前學(xué)習(xí)C# clr做的一些筆記,現(xiàn)在拿出來和大家分享下,希望需要的朋友能參考一下
    2013-05-05
  • C#命名空間與java包的區(qū)別分析

    C#命名空間與java包的區(qū)別分析

    這篇文章主要介紹了C#命名空間與java包的區(qū)別,較為詳細(xì)的分析了C#命名空間與java包的相同點與不同點,非常具有實用價值,需要的朋友可以參考下
    2015-04-04

最新評論

富民县| 巴南区| 平顺县| 饶平县| 万全县| 金华市| 岳普湖县| 杭锦后旗| 龙门县| 大连市| 宁波市| 明溪县| 阿巴嘎旗| 日照市| 杭锦后旗| 夏邑县| 宿松县| 汕尾市| 白城市| 于都县| 定南县| 广灵县| 巴中市| 漯河市| 甘孜| 岑巩县| 芜湖市| 鹰潭市| 双城市| 武山县| 宜兰市| 屏东县| 达日县| 郧西县| 玛曲县| 宜昌市| 宁河县| 古蔺县| 太谷县| 永顺县| 都兰县|