• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
APS-叶童
博客园    首页    新随笔    联系   管理    订阅  订阅

C#自定义类型转换操作符

C#类型转换操作符

C#中两个没有父子关系的类型怎么互相转换呢?

implicit和explicit是一对转换操作符,这对操作符怎么用呢?请看以下例子:

创建一个猴子类

class Monkey
{
  public int Age;
}

创建一个石头类

class Stone
{
 public int Age;
}

石头怎么转换为猴子呢?

实现隐式转换的方法,是在石头类中写一个Implicit类型的Monkey方法,传入参数石头

class Stone
{
 public int Age;

 public static Implicit operator Monkey(Stone stone)
 {
   Monkey monkey = new Monkey();
   monkey.Age = stone.Age / 500;
   return monkey;
  }
}

实现显示转换的方法,是在石头类中写一个explicit类型的Monkey方法,传入参数石头

class Stone
{
 public int Age;

 public static explicit operator Monkey(Stone stone)
 {
   Monkey monkey = new Monkey();
   monkey.Age = stone.Age / 500;
   return monkey;
  }
}

 

隐式转换

Stone stone = new Stone();
stone.Age = 5000;
Monkey wukongSun = stone;
Console.WriteLine(wukongSun.Age);

显式转换

Stone stone = new Stone();
stone.Age = 5000;
Monkey wukongSun = (Monkey)stone;
Console.WriteLine(wukongSun.Age);

  

这样就实现了把石头转换为猴子。

 

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

 

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

posted @ 2021-08-05 23:08  所念所想亦如是  阅读(226)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3