zoukankan      html  css  js  c++  java
  • clr via c# 可空值类型

    1,在CLR中引入了可空值类型结构 System.Nullable<T>-----注意这个是值类型(struct).

      注解:[System.Runtime.InteropServices.ComVisible(true)]---控制member对于Com的可访问性.意思是是否可以由COm来访问.

      注解:system.SerializableAttribute----表明对象是否可以序列化.

    [System.Runtime.InteropServices.ComVisible(true)]
    [System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Delegate | System.AttributeTargets.Enum | System.AttributeTargets.Struct, Inherited=false)]
    public sealed class SerializableAttribute : Attribute

       Serializable---举例

      1.1创建类及相关的方法

     [Serializable]
        public class SerializeTest
        {
            public int member1;
            public string member2;
            public string member3;
            public double member4;
    
            // A field that is not serialized.
            [NonSerialized()] public string member5;
    
            public SerializeTest()
            {
    
                member1 = 11;
                member2 = "hello";
                member3 = "hello";
                member4 = 3.14159265;
                member5 = "hello world!";
            }
    
            public void Print()
            {
    
                Console.WriteLine("member1 = '{0}'", member1);
                Console.WriteLine("member2 = '{0}'", member2);
                Console.WriteLine("member3 = '{0}'", member3);
                Console.WriteLine("member4 = '{0}'", member4);
                Console.WriteLine("member5 = '{0}'", member5);
            }

    1.2 进行测试代码

    使用Soap.SoapFormatter,进行序列化和反序列化一个类的实列.

     public static void Go()
            {
                // Creates a new SerializeTest object.
                SerializeTest obj = new SerializeTest();
    
                Console.WriteLine("Before serialization the object contains: ");
                obj.Print();
    
                // Opens a file and serializes the object into it in binary format.
                Stream stream = File.Open("data.xml", FileMode.Create);
                SoapFormatter formatter = new SoapFormatter();
    
                //BinaryFormatter formatter = new BinaryFormatter();
    
                formatter.Serialize(stream, obj);
                stream.Close();
    
                // Empties obj.
                obj = null;
    
                // Opens file "data.xml" and deserializes the object from it.
                stream = File.Open("data.xml", FileMode.Open);
                formatter = new SoapFormatter();
    
                //formatter = new BinaryFormatter();
    
                obj = (SerializeTest)formatter.Deserialize(stream);
                stream.Close();
    
                Console.WriteLine("");
                Console.WriteLine("After deserialization the object contains: ");
                obj.Print();
            }

    查看 data.xml文件

    <SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:clr="http://schemas.microsoft.com/soap/encoding/clr/1.0" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
    <SOAP-ENV:Body>
    <a1:SerializeTest id="ref-1" xmlns:a1="http://schemas.microsoft.com/clr/nsassem/ClrFromCSharp_2_2.LearnAttribute/ClrFromCSharp_2_2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D11fccde6e91ad1e9">
    <member1>11</member1>
    <member2 id="ref-3">hello</member2>
    <member3 href="#ref-3"/>
    <member4>3.14159265</member4>
    </a1:SerializeTest>
    </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>

    查看结果--member5没有值.

    Before serialization the object contains:
    member1 = '11'
    member2 = 'hello'
    member3 = 'hello'
    member4 = '3.14159265'
    member5 = 'hello world!'
    
    After deserialization the object contains:
    member1 = '11'
    member2 = 'hello'
    member3 = 'hello'
    member4 = '3.14159265'
    member5 = ''
    
    

    2,Nullrable<T>结构的本质

    基本属性

    Nullable<T> 结构的两个基本成员是 HasValueValue 属性。 如果 Nullable<T> 对象的 HasValue 属性为 true,则可以使用 Value 属性访问对象的值。 如果 falseHasValue 属性,则对象的值是不确定的,尝试访问 Value 属性将引发 InvalidOperationException

    装箱和拆箱

    • 装箱:如果HasValue=True ,则装箱Null,否则,装箱其基础值<T>,而非Nullrable<T>.
    • 拆箱:如果HasValue=True,则将其基础值返回,否则返回null;

    3,空接合操作符号??

    string filename=GetFileName()??"Untitled";//如果前面的方法是空,则赋值后面的值.

    4,可空值调用GetType(),返回的是<T>的类型,而不是Null able<T>.

  • 相关阅读:
    javaScript:制作随机验证码
    XSL简明教程
    javascript判断用户使用的浏览器
    jswindow对象的方法和属性资料
    VBscript操作文件
    终于找到组织了...
    公司网站的物流费用设计
    配置live Writer来发blog
    IIS必备的2个插件
    全国默哀 网站首页都要变成灰色的简单解决办法
  • 原文地址:https://www.cnblogs.com/frogkiller/p/12290706.html
Copyright © 2011-2022 走看看