-3

教育目的で、私はキャストを使って多くのことを行います (おそらく一度も使用されていないかもしれません)。それらの1つは、私が嫌いな解決策に私を導きます。

たとえば、2 つのクラスがあるとします。

class ClassA
{
    public int MyInt;
    public string MyString;
}

class ClassB
{
    public int SomeInt;
}

ここで、暗黙的に ClassA を ClassB にキャストしたいと考えています。そのために私は書くことができます:

public static implicit operator ClassB(ClassA obj1)
{
    ClassB obj2 = new ClassB();
    obj2.SomeInt = obj1.MyInt;

    return obj2;
}

でもMyString迷子になる可能性はある、それは許してはならない。この問題を解決するために、変換に追加しました:

if (obj1.MyString != null)
   throw new DataLostException();

これは問題なく動作しますが、もっと簡単な解決策が必要です。私の質問は、この種のデータ損失をより簡単な方法で処理するにはどうすればよいですか?

4

2 に答える 2

1

あなたの解決策は正しいです。このようなデータ損失は、言語の比較的高度な使用法であるユーザー定義の変換演算子を作成するときの「既定の動作」です。

2 つのクラスの間に継承関係はなく、フレームワークがその文字列が他のクラスとどのように関連するかを知る方法はありません。それは、新しいコンテキストではまったく不要な診断情報の一部である可能性があります。

于 2012-06-11T10:45:16.503 に答える
1

私がアップキャストと呼んでいるものを効果的に実行していますが、通常の継承モデルはありません (通常のアップキャストは B が A を拡張するため)。アップキャストにより、データの範囲が狭くなる可能性があります。あまり注目されていないクラスにアップキャストすると、情報が少なくなると予想されます。これが機能する方法です。クラスAにはmystringがないため、クラスAを使用している場合、mystringは気にしません。

于 2012-06-11T10:43:55.420 に答える