C# 转换

2018-01-16 03:40 更新

C# 转换

转换和引用

对象引用可以是:

  • 隐式向上转换为基类引用
  • 显式地向下转换为子类引用

上传总是成功的;只有在对象正确键入时,向下转换才会成功。

向上转换

向上转换操作从子类引用创建基类引用。

例如:


Product myProduct = new Product(); 
Item a = myProduct; // Upcast 

Product DiscountProduct Item 都在上一节中定义。

在upcast之后,变量a仍然引用与变量myProduct相同的Product对象。

被引用的对象本身不被改变或转换:


Console.WriteLine (a == myProduct); // True 

虽然a和myProduct引用相同的对象,但是对该对象有更严格的视图:


Console.WriteLine (a.Name); // OK 
Console.WriteLine (a.InStoreCount); // Error: InStoreCount undefined 

最后一行生成编译时错误,因为变量a的类型为Item,即使它引用了Product类型的对象。

要到达其InStoreCount字段,我们必须将该项目下转到产品。


向下转换

向下转换操作从基类引用创建子类引用。

例如:


Product myProduct = new Product(); 
Item a = myProduct; // Upcast 

Product s = (Product)a; // Downcast 

Console.WriteLine (s.InStoreCount); 
Console.WriteLine (s == a);         // True 
Console.WriteLine (s == myProduct); // True 

与upcast一样,只有引用受影响,而不是底层对象。

向下转换需要显式转换,因为它可能在运行时失败:


DiscountProduct h = new DiscountProduct(); 
Item a = h; // Upcast always succeeds 
Product s = (Product)a; // Downcast fails: a is not a Product 

如果向下转换失败,则抛出 InvalidCastException


as运算符

as 运算符执行一个求值为null的向下转换,而不是在向下转换失败时抛出异常:


Item a = new Item(); 
Product s = a as Product; // s is null; no exception thrown 

当您要随后测试结果是否为null时,这很有用:


if (s != null) {
   Console.WriteLine (s.InStoreCount); 
}
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号