首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在c#中将基类型转换为派生类型

在c#中将基类型转换为派生类型
EN

Stack Overflow用户
提问于 2013-01-16 18:40:12
回答 1查看 141关注 0票数 0

所以我知道你不能从基类型转换到派生类型,因为Animal可能不是Cat,等等。

鉴于此,您是否可以建议一种更好的方法来实现此代码,并避免重复操作符声明和实例化新对象?

代码语言:javascript
复制
class scientific_number
{
    public decimal value;
    public int precision;
    public static implicit operator scientific_number(decimal value)
    {
        return new scientific_number() { value = value, precision = 0 };
    }
    public static implicit operator scientific_number(int value)
    {
        return new scientific_number() { value = (decimal)value, precision = 0 };
    }
    public static implicit operator scientific_number(double value)
    {
        return new scientific_number() { value = (decimal)value, precision = 0 };
    }
}
class amu : scientific_number 
{
    public static implicit operator amu(scientific_number scientific_number)
    {
        return new amu() { value = scientific_number.value, precision = scientific_number.precision };
    }
    public static implicit operator amu(decimal value)
    {
        return new amu() { value = value, precision = 0 };
    }
    public static implicit operator amu(int value)
    {
        return new amu() { value = (decimal)value, precision = 0 };
    }
    public static implicit operator amu(double value)
    {
        return new amu() { value = (decimal)value, precision = 0 };
    }

    public kg ToEarthKg()
    {
        return this.value / 0.00000000000000000000000000166053886;
    }
}
class kg : scientific_number
{
    public static implicit operator kg(scientific_number scientific_number)
    {
        return new kg() { value = scientific_number.value, precision = scientific_number.precision };
    }
    public static implicit operator kg(decimal value)
    {
        return new kg() { value = value, precision = 0 };
    }
    public static implicit operator kg(int value)
    {
        return new kg() { value = (decimal)value, precision = 0 };
    }
    public static implicit operator kg(double value)
    {
        return new kg() { value = (decimal)value, precision = 0 };
    }
}
EN

回答 1

Stack Overflow用户

发布于 2013-01-16 18:43:27

所以我知道你不能从基类型转换为派生类型,因为

可能不是猫,等等。

不对。

你可以,如果对象不是目标类型,你会得到一个异常。

如果使用as运算符,并且目标类型是引用类型,则在无法执行强制转换时将得到null。

所以

代码语言:javascript
复制
Animal d = new Dog();

var c = (Cat)d;   // Will throw

var c1 = d as Cat; // Will return null (assuming Dog is a reference type).
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14356442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档