zoukankan      html  css  js  c++  java
  • C#值类型和引用类型2

    c#所有的类型都继承自System.Object:

      1>值类型继承自System.ValueType;

    namespace System
    {
        // Summary:
        //     Provides the base class for value types.
        [Serializable]
        [ComVisible(true)]
        public abstract class ValueType
        {
            // Summary:
            //     Initializes a new instance of the System.ValueType class.
            protected ValueType();
    
            // Summary:
            //     Indicates whether this instance and a specified object are equal.
            //
            // Parameters:
            //   obj:
            //     Another object to compare to.
            //
            // Returns:
            //     true if obj and this instance are the same type and represent the same value;
            //     otherwise, false.
            public override bool Equals(object obj);
            //
            // Summary:
            //     Returns the hash code for this instance.
            //
            // Returns:
            //     A 32-bit signed integer that is the hash code for this instance.
            [SecuritySafeCritical]
            public override int GetHashCode();
            //
            // Summary:
            //     Returns the fully qualified type name of this instance.
            //
            // Returns:
            //     A System.String containing a fully qualified type name.
            public override string ToString();
        }
    }

    值类型重写了ToString(),GetHashCode(),Equals(object o);

      2>引用类型继承自System.Object;

    namespace System
    {
        // Summary:
        //     Supports all classes in the .NET Framework class hierarchy and provides low-level
        //     services to derived classes. This is the ultimate base class of all classes
        //     in the .NET Framework; it is the root of the type hierarchy.
        [Serializable]
        [ClassInterface(ClassInterfaceType.AutoDual)]
        [ComVisible(true)]
        public class Object
        {
            // Summary:
            //     Initializes a new instance of the System.Object class.
            [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
            public Object();
    
            // Summary:
            //     Determines whether the specified System.Object is equal to the current System.Object.
            //
            // Parameters:
            //   obj:
            //     The System.Object to compare with the current System.Object.
            //
            // Returns:
            //     true if the specified System.Object is equal to the current System.Object;
            //     otherwise, false.
            [TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
            public virtual bool Equals(object obj);
            //
            // Summary:
            //     Determines whether the specified System.Object instances are considered equal.
            //
            // Parameters:
            //   objA:
            //     The first System.Object to compare.
            //
            //   objB:
            //     The second System.Object to compare.
            //
            // Returns:
            //     true if the objects are considered equal; otherwise, false.
            [TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
            public static bool Equals(object objA, object objB);
            //
            // Summary:
            //     Serves as a hash function for a particular type.
            //
            // Returns:
            //     A hash code for the current System.Object.
            [TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
            public virtual int GetHashCode();
            //
            // Summary:
            //     Gets the System.Type of the current instance.
            //
            // Returns:
            //     The System.Type instance that represents the exact runtime type of the current
            //     instance.
            [SecuritySafeCritical]
            public Type GetType();
            //
            // Summary:
            //     Creates a shallow copy of the current System.Object.
            //
            // Returns:
            //     A shallow copy of the current System.Object.
            [SecuritySafeCritical]
            protected object MemberwiseClone();
            //
            // Summary:
            //     Determines whether the specified System.Object instances are the same instance.
            //
            // Parameters:
            //   objA:
            //     The first System.Object to compare.
            //
            //   objB:
            //     The second System.Object to compare.
            //
            // Returns:
            //     true if objA is the same instance as objB or if both are null references;
            //     otherwise, false.
            [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
            [TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
            public static bool ReferenceEquals(object objA, object objB);
            //
            // Summary:
            //     Returns a System.String that represents the current System.Object.
            //
            // Returns:
            //     A System.String that represents the current System.Object.
            public virtual string ToString();
        }
    }

    引用类型有3个Virtual虚方法:Equals(object obj), GetHashCode(),ToString();

                 2个Static静态方法: Equals(object objA, object objB),ReferenceEquals(object objA, object objB);

                 1个公共方法:GetType();

                 1个保护方法:MemberwiseClone();

    3>值类型也可以为null;

    namespace Nullable
    {
        class Program
        {
            static void Main(string[] args)
            {
                //有时候值类型是空是很有用的,泛型使用System.Nullanle<T>类型提供了使值类型为空的一种方式;
                System.Nullable<int> i = null;
    
                //也可以这样写,是System.Nullable<int>的缩写;
                int? j = null;
    
                Console.WriteLine(i);
    
                Console.ReadLine();
            }
        }
    }
  • 相关阅读:
    Codeforces Round #217 (Div. 2)B. Berland Bingo
    走迷宫1 bnu 1054
    MFC 对话框背景图片
    用Visual C++从位图文件生成任意形状的窗口
    poj 2245 Lotto
    poj 1797 Heavy Transportation
    poj 2253 Frogger
    poj 1125 Stockbroker Grapevine
    B. Books
    【转】阻塞与非阻塞socket的优缺点
  • 原文地址:https://www.cnblogs.com/zzunstu/p/3395351.html
Copyright © 2011-2022 走看看