最新消息:把Logo换了一下,虽然丑了点,但至少完全是自己的设计

C#中的自定义类型转换

CSharp 宇托 232浏览 暂无评论

在C#中,可以定义两种类型转换:隐式转换(implicit)和显示转换(explicit)。

这两种类型转换的定义方法如下代码:

C#
// 隐式转换定义
public static implicit 目标类型(原类型 变量参数)
{
   return 目标类型结果;
}
// 显示转换定义
public static explicit 目标类型(原类型 变量参数)
{
   return 目标类型结果;
}

比如:

C#
class TestTypeChange
{
    private int value;
    public int Value
    {
        get { return value; }
    }
    public TestTypeChange(int value)
    {
        this.value = value;
    }
    // TestTypeChange显示转换为int
    public static explicit operator int(TestTypeChange mc)
    {
        return mc.value;
    }
    // int隐式转换为TestTypeChange
    public static implicit operator TestTypeChange(int value)
    {
        return new TestTypeChange(value);
    }
    // TestTypeChange隐式转换为string
    public static implicit operator string(TestTypeChange mc)
    {
        return string.Format("TestTypeChange[Value={0}]", mc.value);
    }
}

关于隐式转换(implicit)和显示转换(explicit)的定义,要注意以下几点:

  1. 转换的定义的标签是目标类型和原类型。也就是说,只要目标类型和原类型不同就可以定义多个转换。
  2. 因为转换的定义的标签不区分隐式转换(implicit)和显示转换(explicit),所以不能同时定义目标类型和原类型相同的隐式转换(implicit)和显示转换(explicit)。
  3. 当有多个原类型相同但目标类型不同的隐式转换时,很可能在调用时因为无法判断用哪个隐式转换而出现编译错误。

参考资料:

  1. c#自定义类型的转换方式operator,以及implicit(隐式)和explicit (显示)声明的区别

转载请注明:宇托的狗窝 » C#中的自定义类型转换

发表我的评论
取消评论

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址