0

したがって、動物は猫などではない可能性があるため、基本型から派生型にキャストできないことはわかっています.

それを踏まえて、このコードを実装するためのより良い方法を提案し、演算子の宣言を繰り返して新しいオブジェクトをインスタンス化する必要を回避できますか?

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 };
    }
}
4

1 に答える 1

0

したがって、動物は猫などではない可能性があるため、基本型から派生型にキャストできないことはわかっています.

違う。

オブジェクトがターゲットタイプでない場合は、例外が発生します。

演算子を使用しas、ターゲットの型が参照型の場合、キャストを実行できない場合は null が返されます。

そう

Animal d = new Dog();

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

var c1 = d as Cat; // Will return null (assuming Dog is a reference type).
于 2013-01-16T10:43:26.620 に答える