zoukankan      html  css  js  c++  java
  • c#隐式转换

    The implicit keyword is used to declare an implicit user-defined type conversion operator.

    http://msdn.microsoft.com/en-us/library/z5z9kes2(v=vs.71).aspx

    之前一直没有用过,最近项目中用到,发现隐式转化还是很有用的,尤其是在代码重构的过程中。

    举个简单的例子:

    在原先的代码中,某一个数据成员一直是String类型,但由于需求变化,我们需要将用到该数据成员的某些scenario变化为CustomList类型。

    这时候我们首先需要实现一个CustomList类型的数据结构,但之前的String类型怎么办呢?

    如果没有隐式转化我们就需要使用两种Type来操作同一数据成员或者都使用CustomList但需要对之前所有用到String的操作都做相应的修改,这样显然有很大的工作量且有可能引起其他的bug.

    这时候隐式转化就发挥作用了,我们可以在CustomList<String>类中实现String和CustomList的相互转化,而不需要再修改之前的任何地方。

    直接上代码了:

     1 public class CustomList : List<String> {
     2 
     3         /// <summary>
     4         /// Initializes a new instance of the <see cref="CustomList"/> class.
     5         /// </summary>
     6         /// <param name="value">The value.</param>
     7         public CustomList(String value) {
     8             Value = value;
     9         }
    10 
    11         /// <summary>
    12         /// Gets or sets the value.  This gets or sets the first value of the
    13         /// list.  This is the same value returned by the implicit string casts.
    14         /// </summary>
    15         /// <value>The value.</value>
    16         public String Value {
    17             get {
    18                 if (Count == 0) {
    19                     return default(String);
    20                 }
    21                 else {
    22                     return base[0];
    23                 }
    24             }
    25             set {
    26                 if (Count == 0) {
    27                     Add(value);
    28                 }
    29                 else {
    30                     base[0] = value;
    31                 }
    32             }
    33         }
    34 
    35         /// <summary>
    36         /// Performs an implicit conversion from <see cref="CustomList"/>
    37         /// </summary>
    38         /// <param name="val">The val.</param>
    39         /// <returns>The result of the conversion.</returns>
    40         public static implicit operator String(CustomList val) {
    41             if (val == null) return null;
    42             return val.Value;
    43         }
    44 
    45         /// <summary>
    46         /// Performs an implicit conversion from <see cref="System.String"/>
    47         /// </summary>
    48         /// <param name="item">The item.</param>
    49         /// <returns>The result of the conversion.</returns>
    50         public static implicit operator CustomList(String item) {
    51             return new CustomList(item);
    52         }
    53     }
  • 相关阅读:
    经典游戏--24点--c++代码实现和总体思路(简单暴力向)
    这么多TiDB负载均衡方案总有一款适合你
    思杰( Citrix)证书的正确处置方式
    从本质彻底精通Git——4个模型1个周期1个史观1个工作流
    HttpClient客户端网络编程——高可用、高并发
    Netty之数据编码
    维吉尼亚密码加解密原理及其实现
    无网环境安装docker之--rpm
    centos7无网环境安装docker
    CentOS8.3最小化安装后安装GNome桌面
  • 原文地址:https://www.cnblogs.com/leon032/p/2547671.html
Copyright © 2011-2022 走看看