转换运算符 implicit,explicit,operator

本文介绍了C#中如何实现类之间的隐式和显式转换,包括转换运算符的定义及使用限制,并通过具体代码示例展示了如何实现这些转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 转换运算符定义了一种从一个类类型到另外一个类类型的转换
  • 隐式转换自动调用,显式转换需要通过一个强制转换来调用
  • 隐式转换只用于不会发生错误的情况
    1. 不能发生丢失信息(截断、溢出、或丢失符号等)
    2. 转换不会抛出异常
  • 使用转换运算符的限制
    1. 不能创建内建的转换。例如,不可以重定义从doubleint的转换。
    2. 不能定义源类型或目标类型是object的转换
    3. 不能对源或目标类型同时进行implicitexplicit的转换
    4. 不能定义一个从基类到派生类的转换
    5. 不能定义源类型或目标类型是一个接口的转换
  • 使用方法:
    public static operator implicit target-type(source-type v) { return value; }

    public static operator explicit target-type(source-type v) { return value; }

 

  • 代码

    using System;
    namespace Convert
    {
          class ThreeD
          {
                int x, y, z;
                public ThreeD()
                {
                      x = y = z = 0;
                }
                public ThreeD(int a, int b, int c)
                {
                      this.x = a;
                      this.y = b;
                      this.z = c;
                }
                public static ThreeD operator +(ThreeD d1,ThreeD d2)
                {
                      ThreeD result = new ThreeD();
                      result.x = d1.x + d2.x;
                      result.y = d1.y + d2.y;
                      result.z = d1.z + d2.z;
                      return result;
                }
                public static implicit operator int(ThreeD op1)
                {
                      return op1.x * op1.y * op1.z;
                }
                public void show()
                {
                      Console.WriteLine(x +"," + y + ","+z);
                }
     }
     class Class1
     {
                static void Main(string[] args)
                {
                      ThreeD a = new ThreeD(1,2,3);
                      ThreeD b = new ThreeD(10,10,10);
                      ThreeD c = new ThreeD();
                      int i;
                      a.show();
                      b.show();
                      //将A和B相加
                      c = a + b;
                      c.show();
                      //转化为int
                      i = a;
                      Console.WriteLine("Result of i = a :" + i);
                      //转化为int
                      i = a * 2 -b;
                      Console.WriteLine("Result of i = a * 2 - b :" + i);    
                }
     }
    }

  • using System;
    namespace Convert
    {
          class ThreeD
          {
                int x, y, z;
                public ThreeD()
                {
                      x = y = z = 0;
                }
                public ThreeD(int a, int b, int c)
                {
                      this.x = a;
                      this.y = b;
                      this.z = c;
                }
                public static ThreeD operator +(ThreeD d1,ThreeD d2)
                {
                      ThreeD result = new ThreeD();
                      result.x = d1.x + d2.x;
                      result.y = d1.y + d2.y;
                      result.z = d1.z + d2.z;
                      return result;
                }
                public static explicit operator int(ThreeD op1)
                {
                      return op1.x * op1.y * op1.z;
                }
                public void show()
                {
                      Console.WriteLine(x +"," + y + ","+z);
                }
     }
     class Class1
     {
                static void Main(string[] args)
                {
                      ThreeD a = new ThreeD(1,2,3);
                      ThreeD b = new ThreeD(10,10,10);
                      ThreeD c = new ThreeD();
                      int i;
                      a.show();
                      b.show();
                      //将A和B相加
                      c = a + b;
                      c.show();
                      //转化为int,必须使用强制
                      i = (int)a;
                      Console.WriteLine("Result of i = a :" + i);
                      //转化为int,必须使用强制
                      i = (int)a * 2 -(int)b;
                      Console.WriteLine("Result of i = a * 2 - b :" + i);    
                }
     }
    }

 

转自:http://www.smartgz.com/Blog/Article/728.asp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值