zoukankan      html  css  js  c++  java
  • C#类型(一)

    1.System.Object

    C#的所有类型都是派生自System.Object

    也就是说下面的两个类型定义完全一致

      // 隐式派生自Object
        public class Person{
    
        }
        {
        // 隐式派生自Object
        public class Person :Object{
    
        }

    System.Object有四个公共方法

    Equals:比较两个对象的值是否相等。

    GetHashCode:返回对象的值的哈希值。

    ToString:默认返回类型的完整名称(this.GetType().FullName)。但经常重写该方法来返回字符串(例如bool转换成string)。

    GetType: 返回调用此方法对象的类型。

    static void Main(string[] args)
            {
                Console.WriteLine("Hello World!");
                string str = "asd";
                int i = 123;
                //默认返回类型
                Console.WriteLine(str.GetType().FullName);
                //将Int转换字符串
                Console.WriteLine(i.ToString());
            
          
                Console.ReadKey();
            }

    默认返回的是当前类型的完整名称。 

    2.类型转换

    在实际工作中经常遇到需要将一种类型转换为另一种类型。C#允许将对象的转换为它的(本身)类型或者它的任何基类类型并这种转换方式是安全可以直接转换。但是将对象转换为它的派生类时,要求显示转换,因为这种转换可能会在运行时失败。

     public class Person{
    
        }
    
    
      static void Main(string[] args)
            {
                Console.WriteLine("Hello World!");
                string str = "asd";
                int i = 123;
                //默认返回类型
                Console.WriteLine(str.GetType().FullName);
                //将Int转换字符串
                Console.WriteLine(i.ToString());
          
                // 不需要显示转换,因为person时Object的派生类
                Object o=new Person();
    
                // 需要显示转换,因为personObject的派生类.不强制转换在编译时抛出异常。
                Person p=(Person)o;
                Console.ReadKey();
            }

    3.类型转换符:is和as

    这是另一种转换方式。

    is:is操作符永远不会抛出异常,只会返回true和false。它的用意是检查对象是否在指定的类型中。

     Object o=new Object();
                // is 检查当前对象是否属于指定对象
                var b1=o is Object;// 返回true
                var b2=o is Person;// 返回false
                Console.WriteLine(b1);
                Console.WriteLine(b2);

    is 操作符的通常用法:

      // is 操作符的的通常用法
                if( o is Person){
                    Person p=(Person) o;
                }

    在转换时会检查两次对象的类型,第一次is操作符会检查o是否属于Emplyoee。如果是则在if语句内部会在检查o是否引用了一个Person。为了解决这个问题C#提供了as操作符。

    as 操纵符:不同于is,在转换成功时as会返回同一个对象的引用。失败时则会返回NULL。所以只需要检查变量是否为null就可以了。

     Person p=o as Person;
                if(p!=null){
                    Console.WriteLine("as");
                }
                // 抛出异常,因为是NULL。
                p.ToString();
    View Code

    抛出异常。

    为了方便理解可以给自己出几道题来测验一下。

  • 相关阅读:
    POJ 3037 Skiing(Dijkstra)
    HDU 1875 畅通工程再续(kruskal)
    HDU 1233 还是畅通工程(Kruskal)
    Java实现 LeetCode 754 到达终点数字(暴力+反向)
    Java实现 LeetCode 754 到达终点数字(暴力+反向)
    Java实现 LeetCode 754 到达终点数字(暴力+反向)
    Java实现 LeetCode 753 破解保险箱(递归)
    Java实现 LeetCode 753 破解保险箱(递归)
    Java实现 LeetCode 753 破解保险箱(递归)
    Java实现 LeetCode 752 打开转盘锁(暴力)
  • 原文地址:https://www.cnblogs.com/jixiaosa/p/10476584.html
Copyright © 2011-2022 走看看