.NET(C#):擷取方法傳回值的自訂特性(Attribute)

.NET中特性的索取就是圍繞著ICustomAttributeProvider介面(System.Reflection命名空間內),而MethodInfo類的ReturnTypeCustomAttributes屬性直接返回方法傳回值的ICustomAttributeProvider介面對象。同時MethodBase的ReturnParameter屬性返回方法傳回值資訊(ParameterInfo),而ParameterInfo也是繼承ICustomAttributeProvider的,所以這兩個

.NET(C#):在字串比較中忽略符號

比如有這樣兩個字串:var a = "a-b=c12";var b =

.NET(C#):使用AsymmetricSignatureFormatter類和AsymmetricSignatureDeformatter類

在前一篇文章:.NET(C#):RSA的SignHash和VerifyHash,我講到使用RSA的SignHash和VerifyHash可以同樣做到SignData和VerifyData,事實上還有一種方法進行公開金鑰加密的簽名認證。就是.NET中的AsymmetricSignatureFormatter和AsymmetricSignatureDeformatter。直接翻譯就是“不對稱式加密簽名格式化器和反格式化器”。分明用來進行建立簽名和驗證簽名的。 他們都需要操作一個不對稱式加密類型(即公

.NET(C#):用CryptoStream計算雜湊值

我們都知道用HashAlgorithm.ComputeHash方法可以計算資料的雜湊值。不過System.Security.Cryptography.HashAlgorithm類是繼承ICryptoTransform介面的,那麼,通過CryptoStream(或者直接操作ICryptoTransform)也是可以計算雜湊值的。 ICryptoTransform的輸入資料就是需要計算雜湊值的來源資料,不過ICryptoTransform的輸出資料和輸入資料是一樣的,真正的雜湊值存在HashAlgo

讓.NET(C#)更好地為中國人輸出數字

來看一個比較長的數字在.NET下的輸出://+ using System.Globalization;//+ using System.Threading; //把當前線程的CultureInfo改成中文-中國"Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("zh-cn"); decimal m =

.NET(C#):使用CspParameters為RSA(或者DSA)提供密鑰本機存放區

RSACryptoServiceProvider和DSACryptoServiceProvider的建構函式都可以指定一個CspParameters結構體。利用這個CspParameters結構體我們可以自訂不對稱式加密演算法的密鑰CSP本機存放區名稱(就是密鑰容器:KeyContainer),這個容器預設是儲存在Windows使用者設定檔中的。如果你想把金鑰儲存區在電腦範圍內(而不是使用者範圍),可以用RSACryptoServiceProvider(或者DSACryptoServicePro

從輸出位元組數組品味.NET(C#)的靈活性

跟電腦打交道難免經常需要輸出一個位元組數組。這篇文章就講講怎樣輸出一個位元組數組在.NET下的各種方法: 最快捷方法:string BitConverter.ToString(byte[])方法。(有重載支援位元組數組的部分輸出) 代碼:Console.WriteLine(BitConverter.ToString(new byte[] { 1, 3, 54, 123, 199, 200, 215, 255

.NET(C#):Emit建立異常處理代碼

目錄Emit異常處理流程 顯示Exception對象的Message屬性   返回目錄 Emit異常處理流程來看這種C#異常處理代碼:static void doo(Exception e){    try    {        throw e;    }    catch (ApplicationException ex)    {        Console.WriteLine("捕獲ApplicationException");    }    catch    {       

.NET(C#):中的基於雜湊演算法的訊息認證碼(HMAC)

基於雜湊演算法的訊息認證碼(HMAC:Hash-based Message Authentication Code )在.NET也可以很輕鬆地實現。 在目前的.NET Framework中(.NET

.NET(C#):DynamicMethod和MethodBuilder的DefineParameter方法

首先定義Emit動態方法時,DynamicMethod和MethodBuilder的DefineParameter方法不是必須的,因為畢竟構造DynamicMethod或MethodBuilder時你需要指定方法的傳回值類型和參數類型。然後是ILGenerator可以直接用ld_loc(N)或者sd_loc(N)來操作相應的參數就可以了。至於傳回值,直接ret指令就可以。所有如果你沒有特殊需要的話,那麼DefineParameter方法是不需要調用的。 如果想為參數加入名稱,自訂特性,或者其他特

.NET(C#):字串比較,識別IME的全形和半形字元

訣竅就在CompareOptions.IgnoreWidth枚舉。這個枚舉可以在CompareInfo.Compare方法中用到。而CompareInfo對象可以在CultureInfo的CompareInfo屬性中得到。 代碼://半形(英文)abc78var a = "abc78";//全形的abc78var b = "abc78"; Console.WriteLine(String.Compare(a,

.NET(C#):AppDomain類中丟失的LoadFrom方法

AppDomain的Load方法有諸多重載,但是沒有一個等效於LoadFrom(這裡是指Assembly的LoadFrom)。其AssemblyName和string參數都是針對Load(string參數是指程式及名稱的全名而不是路徑)。而byte[]參數相當於LoadFile。 AppDomain.ExecuteAssembly可以傳入檔案路徑,但是從名字上可以看出來這裡只針對可執行檔程式集。(AppDomain還有ExecuteAssemblyByName可以傳入AssemblyName,即

.NET(C#):從IL和反射Emit更徹底地理解out參數

C#中ref和out的文章有很多,這篇文章主要從IL上分析out參數的本質。 目錄out = ref + ParameterAttributes.Out 反射調用ref和out方法 Emit構建out或ref參數   返回目錄 out = ref + ParameterAttributes.Out看兩個out和ref的方法。static void test_ref(ref int i){ } static void test_out(out int i){ i = default(int); }

.NET(C#):XmlArrayItem特性和XmlElement特性在序列化數組的差別

比如這樣一個類,我們用XmlArrayItem特性標明數組內出現的元素類型:public class a{    [XmlArrayItem(Type = typeof(int)), XmlArrayItem(Type = typeof(Guid)), XmlArrayItem(Type = typeof(string))]    public object[] arr = new object[] { 12, "hehe", Guid.NewGuid() };} 序列化的XML是:<a

.NET(C#)平台叫用:DllImportAttribute.CharSet和字串封送編碼

首先如果您看下面代碼有些費解的話,推薦先閱讀以下MSDN上關於平台叫用的指定字元集文章:http://msdn.microsoft.com/zh-cn/library/7b93s42f.aspx 學習.NET(C#)的平台叫用和對象封送,你會發現其實同樣的系統API函數的平台叫用定義可以有多種形式的,本文就拿WinAPI的MessageBox開涮。首先通過DllImportAttribute.CharSet來自動指定名稱探索(根據DllImportAttribute.ExactSpelling)

.NET(C#)配置系統:使用ConfigurationElement.DeserializeElement讀取XML元素形式的屬性

假設有這麼一個簡單的ConfigurationSection類型(只有一個Id屬性):class MySection : ConfigurationSection{    [ConfigurationProperty("id")]    public int Id    {        get { return (int)this["id"]; }        set { this["id"] = value; }    } } 那麼你的設定檔只能這樣寫:<configuration&

.NET(C#) :關於開關(Switch類)的Value和SwitchSetting屬性

System.Diagnostics.Switch類的Value和SwitchSettings屬性是protected修飾符,並且是可以設定的。Value是字串類型,SwitchSetting是int類型。Switch類的值是Value屬性,當值被設定後,Switch會嘗試將Value字串轉換成SwitchSetting的數字。如果無法成功轉換,異常將會被拋出。 當自訂Switch類時,可以改寫OnValueChanged和OnSwitchSettingChanged方法來自訂Value屬性和S

.NET(C#)平台叫用:字串的預設封送形式是UnmanagedType.LPTStr,但是……

MSDN的這篇文章有點講地不清楚:http://msdn.microsoft.com/en-us/library/s9ts558h.aspx 文中說的字串的COM調用預設封送形式是UnmanagedType.Bstr,而平台叫用的預設封送形式是UnmanagedType.LPTStr。這個LPTStr是和平台相關的,就是WinAPI中的TCHAR定義(98/Me是ANSI,NT/2000/XP/…是Unicode)。然後這一段落就結束了……是的,MSDN上面的這些說的都沒錯,但是它應該提一下平台

.NET(C#):修改調試或追蹤中預設的斷言(Assert)的表現

注意:以Trace類做樣本,但Debug類也通用。 Trace.Listeners預設是一個System.Diagnostics.DefaultTraceListener類型,這個類型的接聽程式會在斷言時彈出一個對話方塊,如下代碼://+ using System.Diagnostics;Trace.Assert(false,

.NET(C#)平台叫用:類和結構體的封送

以GetCursorPos做樣本,它返回當前滑鼠指標在螢幕的位置(以一個POINT結構體)。關於GetCursorPos和POINT的定義可以參考MSDN:http://msdn.microsoft.com/en-us/library/ms648390(v=vs.85).aspxhttp://msdn.microsoft.com/en-us/library/dd162805(v=vs.85).aspx 首先實現用自訂C#結構體來調用GetCursorPos,一切看著很簡單。定義一個記憶體分別連續

總頁數: 4314 1 .... 453 454 455 456 457 .... 4314 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.