ylbtech-Microsoft-CSharpSamples:ylbtech-LanguageSamples-UserConversions(用户定义的转换)
1.A,示例(Sample) 返回顶部

“用户定义的转换”示例

本示例演示如何定义与类或结构之间的转换,以及如何使用此类转换。有关更多信息,请参见转换运算符(C# 编程指南) 。

安全说明

提供此代码示例是为了阐释一个概念,它并不代表最安全的编码实践,因此不应在应用程序或网站中使用此代码示例。对于因将此代码示例用于其他用途而出现的偶然或必然的损害,Microsoft 不承担任何责任。

在 Visual Studio 中生成并运行“用户定义的转换”示例

  1. 在“解决方案资源管理器”中,右击“Conversion1”项目并单击“设为启动项目”。

  2. 在“调试”菜单上,单击“开始执行(不调试)”。

  3. 对 Conversion2 重复上述步骤。

从命令行生成并运行“用户定义的转换”示例

  1. 使用“更改目录”命令转到“Conversion1”目录。

  2. 键入以下命令:

    1. csc conversion.cs
    2. conversion
  3. 使用“更改目录”命令转到“Conversion2”目录。

  4. 键入以下命令:

    1. csc structconversion.cs
    2. structconversion
1.B,Conversion1 示例代码(Sample Code)返回顶部

1.B.1, conversion.cs

  1. // 版权所有(C) Microsoft Corporation。保留所有权利。
  2. // 此代码的发布遵从
  3. // Microsoft 公共许可(MS-PL,http://opensource.org/licenses/ms-pl.html)的条款。
  4. //
  5. //版权所有(C) Microsoft Corporation。保留所有权利。
  6.  
  7. // conversion.cs
  8. using System;
  9.  
  10. struct RomanNumeral
  11. {
  12. public RomanNumeral(int value)
  13. {
  14. this.value = value;
  15. }
  16. // 声明从 int 到 RomanNumeral 的转换。请注意
  17. // operator 关键字的使用。这是名为
  18. // RomanNumeral 的转换运算符:
  19. static public implicit operator RomanNumeral(int value)
  20. {
  21. // 请注意,由于 RomanNumeral 声明为结构,
  22. // 因此对该结构调用 new 只是调用构造函数
  23. // 而不是在堆上分配对象:
  24. return new RomanNumeral(value);
  25. }
  26. // 声明从 RomanNumeral 到 int 的显式转换:
  27. static public explicit operator int(RomanNumeral roman)
  28. {
  29. return roman.value;
  30. }
  31. // 声明从 RomanNumeral 到
  32. // string 的隐式转换:
  33. static public implicit operator string(RomanNumeral roman)
  34. {
  35. return("Conversion not yet implemented");
  36. }
  37. private int value;
  38. }
  39.  
  40. class Test
  41. {
  42. static public void Main()
  43. {
  44. RomanNumeral numeral;
  45.  
  46. numeral = ;
  47.  
  48. // 调用从 numeral 到 int 的显式转换。由于是显式转换,
  49. // 因此必须使用强制转换:
  50. Console.WriteLine((int)numeral);
  51.  
  52. // 调用到 string 的隐式转换。由于没有
  53. // 强制转换,到 string 的隐式转换是可以考虑的
  54. // 唯一转换:
  55. Console.WriteLine(numeral);
  56.  
  57. // 调用从 numeral 到 int 的显式转换,
  58. // 然后调用从 int 到 short 的显式转换:
  59. short s = (short)numeral;
  60.  
  61. Console.WriteLine(s);
  62. }
  63. }

1.B.2,

1.B.EXE,

  1. Conversion not yet implemented
  2.  
  3. 请按任意键继续. . .

1.B

1.B,Conversions2 示例代码2(Sample Code)返回顶部

1.B.1, structconversion.cs

  1. // 版权所有(C) Microsoft Corporation。保留所有权利。
  2. // 此代码的发布遵从
  3. // Microsoft 公共许可(MS-PL,http://opensource.org/licenses/ms-pl.html)的条款。
  4. //
  5. //版权所有(C) Microsoft Corporation。保留所有权利。
  6.  
  7. // structconversion.cs
  8. using System;
  9.  
  10. struct RomanNumeral
  11. {
  12. public RomanNumeral(int value)
  13. {
  14. this.value = value;
  15. }
  16. static public implicit operator RomanNumeral(int value)
  17. {
  18. return new RomanNumeral(value);
  19. }
  20. static public implicit operator RomanNumeral(BinaryNumeral binary)
  21. {
  22. return new RomanNumeral((int)binary);
  23. }
  24. static public explicit operator int(RomanNumeral roman)
  25. {
  26. return roman.value;
  27. }
  28. static public implicit operator string(RomanNumeral roman)
  29. {
  30. return("Conversion not yet implemented");
  31. }
  32. private int value;
  33. }
  34.  
  35. struct BinaryNumeral
  36. {
  37. public BinaryNumeral(int value)
  38. {
  39. this.value = value;
  40. }
  41. static public implicit operator BinaryNumeral(int value)
  42. {
  43. return new BinaryNumeral(value);
  44. }
  45. static public implicit operator string(BinaryNumeral binary)
  46. {
  47. return("Conversion not yet implemented");
  48. }
  49. static public explicit operator int(BinaryNumeral binary)
  50. {
  51. return(binary.value);
  52. }
  53.  
  54. private int value;
  55. }
  56.  
  57. class Test
  58. {
  59. static public void Main()
  60. {
  61. RomanNumeral roman;
  62. roman = ;
  63. BinaryNumeral binary;
  64. // 执行从 RomanNumeral 到
  65. // BinaryNumeral 的转换:
  66. binary = (BinaryNumeral)(int)roman;
  67. // 执行从 BinaryNumeral 到 RomanNumeral 的转换。
  68. // 不需要任何强制转换:
  69. roman = binary;
  70. Console.WriteLine((int)binary);
  71. Console.WriteLine(binary);
  72. }
  73. }

1.B.2,

1.B.EXE,

  1. Conversion not yet implemented
  2. 请按任意键继续. . .

1.B,

1.C,下载地址(Free Download)返回顶部
作者:ylbtech
出处:http://ylbtech.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

ylbtech-LanguageSamples-UserConversions(用户定义的转换)的更多相关文章

  1. C++笔记之用户定义的转换

    用户定义的转换(User-defined Conversion) 是一种将一个类类型转换为另一种类型的机制 语法 operator conversion-type-idexplicit operato ...

  2. CREATE CAST - 定义一个用户定义的转换

    SYNOPSIS CREATE CAST (sourcetype AS targettype) WITH FUNCTION funcname (argtype) [ AS ASSIGNMENT | A ...

  3. CREATE CONVERSION - 定义一个用户定义的码制转换

    SYNOPSIS CREATE [DEFAULT] CONVERSION name FOR source_encoding TO dest_encoding FROM funcname DESCRIP ...

  4. C#高级编程四十一天----用户定义的数据类型转换

    用户定义的数据类型转换 C#同意定义自己的 数据类型,这意味着须要某些 工具支持在自己的数据类型间进行数据转换.方法是把数据类型转换定义为相关类的一个成员运算符,数据类型转换必须声明为隐式或者显式,以 ...

  5. C#编程(四十一)----------用户定义的数据类型转换

    用户定义的数据类型转换 C#允许定义自己的 数据类型,这意味着需要某些 工具支持在自己的数据类型间进行数据转换.方法是把数据类型转换定义为相关类的一个成员运算符,数据类型转换必须声明为隐式或者显式,以 ...

  6. GIS中的坐标系定义与转换

    GIS中的坐标系定义与转换 青岛海洋地质研究所 戴勤奋 2002-3-27 14:22:47 ----------------------------------------------------- ...

  7. Hadoop Hive概念学习系列之hive里的用户定义函数UDF(十七)

    Hive可以通过实现用户定义函数(User-Defined Functions,UDF)进行扩展(事实上,大多数Hive功能都是通过扩展UDF实现的).想要开发UDF程序,需要继承org.apache ...

  8. 【翻译】Flink Table Api & SQL — 用户定义函数

    本文翻译自官网:User-defined Functions  https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/tabl ...

  9. SQL SERVER中用户定义标量函数(scalar user defined function)的性能问题

    用户定义函数(UDF)分类  SQL SERVER中的用户定义函数(User Defined Functions 简称UDF)分为标量函数(Scalar-Valued Function)和表值函数(T ...

随机推荐

  1. poj2104 主席树 区间K大 在线 无修改

    关于主席树: 主席树(Chairman Tree)是一种离线数据结构,使用函数式线段树维护每一时刻离散之后的数字出现的次数,由于各历史版本的线段树结构一致,可以相减得出区间信息,即该区间内出现的数字和 ...

  2. 六十六 aiohttp

    asyncio可以实现单线程并发IO操作.如果仅用在客户端,发挥的威力不大.如果把asyncio用在服务器端,例如Web服务器,由于HTTP连接就是IO操作,因此可以用单线程+coroutine实现多 ...

  3. centos 7 mini版中安装Python3.x

    首先了解几句Linux命令是必须的.例如 ls, vi, wget, rm, mv, cd, su, sudo, chmod, tar等等一些常用的语句命令是有必要知道它的用法的. 安装Python3 ...

  4. 【转载】LinearLayout 源码分析

    原文地址:https://github.com/razerdp/AndroidSourceAnalysis/blob/master/LinearLayout/android_widget_Linear ...

  5. python url配置单独放在某个应用目录中

    文件目录: 将 urls.py 文件复制blog目录下: 此时,blog文件夹下多了urls.py文件 现在对比,两个urls.py文件: 分离前:(只有website里有urls.py) from ...

  6. ZOJ 2974 Just Pour the Water

    矩阵快速幂. 构造一个矩阵,$a[i][j]$表示一次操作后,$j$会从$i$那里得到水的比例.注意$k=0$的时候,要将$a[i][j]$置为$1$. #pragma comment(linker, ...

  7. Poj2482 Stars in Your Window(扫描线)

    题面 Poj 题解 下面内容引用自"李煜东 <算法竞赛进阶指南>"(对原文略有缩减,侵删): 因为矩形的大小固定,所以矩形可以由它的任意一个顶点唯一确定.我们可以考虑把 ...

  8. application.xml

    application.xml Deployment Descriptor Elements The following sections describe the application.xml f ...

  9. python 写文件write(string), writelines(list) ,读文件

    read()方法用于直接读取字节到字符串中,可以接参数给定最多读取的字节数,如果没有给定,则文件读取到末尾. readline()方法读取打开文件的一行(读取下个行结束符之前的所有字节),然后整行,包 ...

  10. 【BZOJ 1478】 1478: Sgu282 Isomorphism (置换、burnside引理)

    1478: Sgu282 Isomorphism Description 给 定一个N 个结点的无向完全图( 任意两个结点之间有一条边), 现在你可以用 M 种颜色对这个图的每条边进行染色,每条边必须 ...