zoukankan      html  css  js  c++  java
  • 类型转换(一)

      CLR 最重要的特性之一就是类型安全性。在运行时,CLR 总是知道一个对象是什么类型,调用 GetType() 方法即可,该方法不是 virtual 方法,故派生类不能重写,所以得到的类型绝对就是对象的实际类型。我们在实际开发中,由于各种原因,我们常常会需要进行类型转换,CLR 允许一个对象转换成它的(实际)类型或其基类型,C#支持直接将派生类型的实例的引用赋值给其基类型,也就是我们通常所说的隐式类型转换。也可以使用强制类型转换,但是这可能导致运行时的错误。例如:

    public class Person
    {
    public string Name{ get; set;}

    public int Age { get; set;}

    public virtual void ShowMyself( )
    {
    Console.WriteLine(
    string.Format("My name is {0}, and I am {1} years old !!!", Name, Age));
    }
    }

    public class Man : Person
    {
    public string Sex { get; set; }

    public override void ShowMyself()
    {
    Console.WriteLine(
    string.Format("My name is {0}, and I am {1} years old , I am {2}", base.Name, base.Age, Sex));
    }
    }

    class Program
    {
    static void Main(string[] args)
    {
    ///隐式类型转换
    Person p = new Man( );

    ///强制类型转换
    Man m = (Man)p;

    ///编译通过,运行时无异常
    ShowPersonInfo(m);

    ///编译通过,但是运行时报错
    ShowPersonInfo(DateTime.Now);

    p.ShowMyself( );

    m.ShowMyself( );

    Console.Read( );
    }

    public static void ShowPersonInfo(object obj )
    {
    Person p
    = (Person)obj;
    }
    }

      这里我们只解释 ShowPersonInfo(DateTime.Now) 调用。ShowPersonInfo 的实参为 object 类型,则当传入 DateTime 类型时,由于

    DateTime 类型也派生自 System.Object ,所以编译是可通过的,而运行时,传入的 DateTime 类型与 Person 类型无继承关系,是非法的转换,

    故会提示 System.InvalidCastException 异常。此处应该将该方法的参数类型设为 Person ,这样在编译时就能判断有错误。

  • 相关阅读:
    IHE 官方网址有用资源介绍
    HL7 标准及实现指南 必看的网址
    HL7及PIX相关的测试工具
    hl7 v2.X 版本中RSP_K23消息的构造
    hl7中V2版本的ACK消息的构造
    hl7消息中和时间有关的字段的格式
    解决方案: the selected file is a solution file but was created by a newer version of this application and cannot be opened
    wpf中为DataGrid添加checkbox支持多选全选
    hl7 V2中Message Control ID的含义及应用
    Pix mesa 自动化测试
  • 原文地址:https://www.cnblogs.com/jiejie_peng/p/2026115.html
Copyright © 2011-2022 走看看