xuejianhui

导航

C#常用笔记.cs

---------------------------------------------------------------------------------------------------------
【C#: string--转换-->byte[]】 :
    byte[] byteArray = System.Text.Encoding.Default.GetBytes(  str  );

    string str = System.Text.Encoding.Default.GetString( byteArray );

---------------------------------------------------------------------------------------------------------

【C#字符串串替换方法/(正则表达式)】 : 
    例:
    //正则表达式需要引入命名空间
    using System.Text.RegularExpressions;

    private void Method()
    {
        string str = "aa\bb\cc";
        StringBuilder sb = new StringBuilder(str);
        sb.Replace("\\", "\\\\");       //不解释,自己领悟
        MessageBox.Show(sb.ToString());
        //打印结果 aa\\bb\\cc
    }

---------------------------------------------------------------------------------------------------------

【C#预定义特性】:
    [DllImport] 允许.Net代码调用任意非托管的C/C++基类库,包括操作系统的API。注意当与基于COM软件通信时,它就不能使用了。
    [Serializable] 标记一个类/结构可以被“序列化”,意味着它将可以将当前状态持久化到数据流中。
    [NonSerialized] 指定类/结构的某个字段不能在序列化过程中被持久化。
    [Obsolete] 标记一个不用的类/成员,如其他程序员试图使用该项,他们将会收到一个描述出错信息的编译告警。
        例1:如有个遗留的C#类被标记为序列化,但又废弃了。可不必将其从代码库中删除(可能会破坏已有软件),可用[Obsolete]特性标记这个类。
        方法一 : 
            [Serializable, Obsolete("Use another vehicle!")]
            public class LeaveOver
            {
                //...
            }
        方法二 : 
            [Serializable]
            [Obsolete("Use another vehicle!")]
            public class LeaveOver
            {
                //...
            }

        例2:
            [StructLayout(LayoutKind.Sequential, Pack = 4)]
            public struct STREAM_ATTRIBUTE
            {
                //...
            }
        解析:
            StructLayout    : 使用户可以控制类或结构的数据字段的物理布局。
            LayoutKind      : 控制当导出到非托管代码时对象的布局。
            Sequential      : LayoutKind类中的一个枚举值,表示对象的成员按照它们在被导出到非托管内存时出现的顺序依次布局。
                                这些成员根据在Pack中指定的封装进行布局,并且可以是不连续的。
            Pack            : LayoutKind类中的一个int型成员,控制类或结构的数据字段在内存中的对齐方式。

        例3:
        using System.Runtime.InteropServices;
        [DllImport("HWPuSDK.dll", EntryPoint = "IVS_PU_StopRealPlay", CharSet = CharSet.Ansi, SetLastError = true, PreserveSig = true, CallingConvention = CallingConvention.StdCall)]
        public static extern int IVS_PU_WriteLogToFile(int ulLogEnable, String szFileName, int ulFileNum, int ulSizePerFile);

        解析DllImportAttribute成员变量:
            "HWPuSDK.dll"   : 包含非托管方法的 DLL 的名称。如果 DLL 包含在某个程序集中,则可以包含程序集显示名称。
            EntryPoint      : 指示要调用的 DLL 入口点的名称或序号。
            CharSet         : 指示如何向方法封送字符串参数,并控制名称重整。CharSet.Ansi表示:以多字节字符串的形式封送字符串。
            SetLastError    : 指示被调用方在从属性化方法返回之前是否调用 SetLastError Win32 API 函数。
            PreserveSig     : 指示是否直接转换具有 HRESULT 或 retval 返回值的非托管方法,或是否自动将 HRESULT 或 retval 返回值转换为异常。
            CallingConvention   : 指示入口点的调用约定。CallingConvention.StdCall表示:被调用方清理堆栈。这是使用平台 invoke 调用非托管函数的默认约定。

---------------------------------------------------------------------------------------------------------

posted on 2012-11-21 10:16  xuejianhui  阅读(541)  评论(0编辑  收藏  举报