显式和隐式在没在c#项目中使用

  介绍

本篇文章给大家分享的是有关显式和隐式在没在c#项目中使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

if  (dto.Payment ==, null),继续;   var  entity =, entries.FirstOrDefault (e =祝辞,e.LedgerEntryID ==, dto.LedgerEntryID);   时间=dto.Payment 实体贸易术语;

其中dto.Payment是一个PaymentDTO类的实例,实体?。付款是一个付款类的实例,PaymentDTO类和类付款没有子父关系,所以不存在子类和父类之间的隐式转换。

奇怪的是Visual Studio的编译器没有提示任何编译错误。

打开PaymentDTO类的定义之后,发现了以下方法签名。

public  static  implicit  operator  PaymentDTO (Payment 付款)

从方法签名上看,这就是重写PaymentDTO类型的操作符,但并不是我以前常用的+,-,*,/,==等。

查询MSDN之后,才了解到隐式和显式是一对转换操作符。

<>强隐式和显式

隐式

隐含的关键字用于声明隐式的用户定义类型转换运算符,它可以实现2个不同类的隐式转换,提高代码的可读性。但是需要注意使用隐式转换操作符之后,在编译时会跳过异常检查,所以隐式转换运算符应当从不引发异常并且从不丢失信息,否则在运行时会出现一些意想不到的问题。

例如当前PaymentDTO和付款的定义如下

public  class 付款   {才能   ,,,,public  decimal  Amount {组,得到,,,}   ,,}   public 才能;class  PaymentDTO   {才能   ,,,,public  string  AmountString {组,得到,,,}   以前,,}

如果需要将支付隐式转换成PaymentDTO,仅需声明PaymentDTO的隐式转换运算符

public  class  PaymentDTO   ,,,{   ,,,,,public  string  AmountString {组,得到,,,}   public  static  implicit  operator  PaymentDTO (Payment 付款)   ,,,,,{   ,,,,,,,return  new  PaymentDTO   ,,,,,,,{   时间=AmountString  payment.Amount.ToString (“C2")   ,,,,,,,};   ,,,,,}   ,,,}

调用时只需要直接赋值就可以

class 程序   ,,,{   ,,,,,static  void  Main (string [], args)   ,,,,,{   PaymentDTO  dto =, new  Payment  {, Amount =, 1,};   ,,,,,,,Console.WriteLine (dto.AmountString);   ,,,,,,,Console.Read ();   ,,,,,}   ,,,}

<强>明确

明确的关键字声明必须通过转换来调用的用户定义的类型转换运算符。不同于隐式转换,显式转换运算符必须通过转换的方式来调用,如果缺少了显式的转换,在编译时就会产生错误。

例如现在我们将前面PaymentDTO类中定义的转换操作符从隐式变为显式

public  class  PaymentDTO   ,,,{   ,,,,,public  string  AmountString {组,得到,,,}   public  static  explicit  operator  PaymentDTO (Payment 付款)   ,,,,,{   ,,,,,,,return  new  PaymentDTO   ,,,,,,,{   时间=AmountString  payment.Amount.ToString (“C2")   ,,,,,,,};   ,,,,,}   ,,,}

这时候由于主方法中没有显式转换,所以编译器出错,提示不能隐式类型转换& # 39;ExplicitImplicit.Payment& # 39;& # 39;ExplicitImplicit.PaymentDTO& # 39;。存在一个显式转换(你失踪一?)

显式和隐式在没在c#项目中使用“> </p> <p>如果想要编译器通过编译,只需要做一个显示转换即可</p> <pre类= class 程序   ,,,{   ,,,,,static  void  Main (string [], args)   ,,,,,{   PaymentDTO  dto =, (PaymentDTO) new  Payment  {, Amount =, 1,};   ,,,,,,,Console.WriteLine (dto.AmountString);   ,,,,,,,Console.Read ();   ,,,,,}   ,,,}

以上就是显式和隐式在没在c#项目中使用,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

显式和隐式在没在c#项目中使用