zoukankan      html  css  js  c++  java
  • C# 三个关键字operator搭配implicit和explicit的用法

    implicit 关键字用于声明隐式的用户定义类型转换运算符。如果可以确保转换过程不会造成数据丢失,则可使用该关键字在用户定义类型和其他类型之间进行隐式转换。隐式转换可以通过消除不必要的类型转换来提高源代码的可读性。 但是,因为隐式转换不需要程序员将一种类型显式强制转换为另一种类型,所以使用隐式转换时必须格外小心,以免出现意外结果。 一般情况下,隐式转换运算符应当从不引发异常并且从不丢失信息,以便可以在程序员不知晓的情况下安全使用它们。 如果转换运算符不能满足那些条件,则应将其标记为 explicit。

    举个例子

     1     class A : IDisposable
     2     {
     3         public A(float f)
     4         {
     5             p = f;
     6         }
     7 
     8         public float p { get; }
     9 
    10         public static implicit operator A(float f)
    11         {
    12             return new A(f);
    13         }
    14 
    15         public static implicit operator float(A a)
    16         {
    17             return a.p;
    18         }
    19 
    20         public static explicit operator B(A a)
    21         {
    22             return new B(a.p * 2);
    23         }
    24 
    25 
    26 
    27         public void Dispose()
    28         {
    29         }
    30     }
    31 
    32     class B
    33     {
    34         public B(float f)
    35         {
    36             p = f;
    37         }
    38         public float p { get; }
    39 
    40         public static explicit operator A(B b)
    41         {
    42             return new A(b.p * 10f);
    43         }
    44 
    45     }

    调用代码

     1             A a = null;
     2             a?.Dispose();
     3             //初始化构造函数
     4             a = new A(100.12345f);
     5             //把a对象赋值给f,其实这个时候float已经被重载运算了所以不会报错
     6             float f = a;
     7             //把30赋值给a2对象的时候,A类已被重载了
     8             A a2 = 30;
     9             Console.WriteLine( "f是:" + f + "
    ");
    10             Console.WriteLine("a2.p是:" + a2.p + "
    ");
    11             B b = (B)a;
    12             Console.WriteLine("b.p是:" + b.p + "
    ");

    得到的结果是

    f是:100.1235

    a2.p是:30

    b.p是:200.2469


    总结:连续介绍了三个关键字operator搭配implicit和explicit,重载运算,类型转换的过程当中都离不开static,explicit需要强制转换而implicit隐试转换类型。
    ---------------------
    作者:鸿雁
    来源:CSDN
    原文:https://blog.csdn.net/w200221626/article/details/52413700
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    luogu P1613 跑路
    luogu P2047 社交网络
    luogu P2740 [USACO4.2]草地排水Drainage Ditches
    「字典树」最大异或对
    「贪心」耍杂技的牛
    「贪心」士兵
    「贪心」糖果传递
    「几何」[USACO12DEC]疯狂的栅栏Crazy Fences
    「LCA」[USACO10HOL]牛的政治Cow Politics
    「二分答案 + 前缀和」防线
  • 原文地址:https://www.cnblogs.com/xushitairan/p/10930750.html
Copyright © 2011-2022 走看看