以下のようにマルチキャスト

静的型チェックと呼ばれる仕組みがあり、このメカニズムは、アプリケーションがC#で、実行時に以下のオペレーティング型のチェックを追加するように、私たちは不満使用法の種類を見つけるためにヘルプをコンパイラができます。しかし、時には、私たちはまだ、たとえば、私たちは型オブジェクトの多くを持っているとき、あなたはパラメータの他のタイプに変換する必要があり、オブジェクトとして定義されているメソッドのパラメータの型のフレームワークを設計し、実行時の型チェックする必要があります。どちらの方法でも、私たちを変換するために使用することができます:一つは、他のことでコンパイラの型チェックのバイパスこのメソッド缶は、操作が合理的であるかどうかを判断することで、キャストで使用する前に、変換することができます変換または使用のキャストのための演算子として。ここでは、いくつかのキャストとして、より使用の理由を使用することを説明する必要があります。

零として、そしてあります

型変換として使用することは必須の変換よりも安全、かつより効率的な動作になります。しかし、一つのことは、あなたがタイプに変換するときの動作のタイプと一致オペレーターとして、ユーザー定義型の変換にのみ考慮されていません円滑に進行させることができることに留意すべきであります。めったにキャストに表示されていないし、オペレーター箱入り値の型変換が箱詰めされないだけのように、新しいオブジェクトを作成し、新しいオブジェクトの型がヌルである作成と一般的にキャストします。
例えば、可変ハスキー(ハスキー)は犬型である、と言うことである、多型の原則に従うオペレータであり、動物犬型から型継承は、コードセグメントは、husky is Animal値がTrueを返します。だから我々は、オブジェクトが特定のタイプであるかどうかを決定するために、この機能を使用することができます。もちろん、我々はまた、それを作るために返すオブジェクトの種類や特定の種類の主な原因、開発者はより具体的に記述することができますし、より多くの種類としてより詳細に説明されてGetTypeメソッドによって実行時オブジェクトの種類を照会するために使用することができます対照的。

まず、なぜキャストではありません

コードの一部で見てみましょう:

try
{
    object obj = Factory.GetObject();
    Animal animal;
    animal = (Animal) obj;
    if (animal !=null)
    {
        // more code
    }
    // more code
}
catch (InvalidCastExcept ex)
{
    // more code
}

私たちは型動物のオブジェクト型変数に変換するには、キャストを使用する上記のコードでは、私は確かにいくつかの開発者がそう非常に多くが過大ではない、実際の開発に書き込まれますが、この1つは問題があり、開発者のニーズです二つの問題を解決します。まず、我々はキャプチャに持っているので、プログラムは出会いによって私たちは、動物の変数がnullかどうかを決定する必要がありますので、キャストは、例外をスローしないヌル時間が続く、InvalidCastExceptionが例外をスローOBJ型動物の変数に変換できない場合。キャストは、この問題を持っているので、どのように我々はそれを解決するのですか?その後、我々は、演算子として使用することができますし、コードで同じ私たちの外観は、次のとおりです。

try
{
    object obj = Factory.GetObject();
    if (obj is Animal)
    {
        Animal animal =  obj as Animal;
        // more code
    }
    else
    {
        // more code
    }
}

他のコードが実行される一方、オペレータとして使用するために変換することができる場合objが、動物のタイプに変換することができるならば、我々は最初に決定され、このアプローチを使用。キャプチャエラーのどちらも必要もエラーコードの可能性を削減しながら、コードの量を減らし、キャストを必要としません。
ユーザ定義のロジックの変換に対処する方法であり、オペレータ及び転送タイプ、などの力の間には大きな違いがあります。ボックス化とアンボックス化添加物として、オペレータが行わなければならないとされ、処理結果に応じただけのようであり、どのような種類の変換ランバンドで決定される任意の他の操作を実行し、対応しないであろう。オブジェクトが変換タイプをターゲットに属していない場合は、操作に失敗したように、その後、派生型のターゲット・タイプに属していません。キャストはそうではない、変換論理型変換のいくつかのタイプを使用することが可能である、だけでなく、ユーザー定義の変換ロジック、さらにビルトインタイプの間の変換を含みます。しかし、キャストはこのような長いから短いにキャストとして、情報の損失を引き起こす可能性があることに注意してください。
いくつかのケースで使用しキャストが正常にビューのコードポイントから変換しているように見えるが、実際にそれが成功した変換ではありません。そして、なぜ?キャストは、アカウントにユーザー定義のロジックを変換するが、唯一のオブジェクトのコンパイル時の型のためになりますが、コンパイル時の型は、基本タイプではありません。コンパイラは、オブジェクトとして、次にキャストならば、それはエラーになりますので、例えば、コンパイル時に変換タイプと、オブジェクトの種類です。
彼は言った、以前の我々はそれがあるとして使用され、どのような時にすることができないと言うことができ、このセクションでは、その後、ずっととして使用することの利点。同様に、最初のコードの一部を見て:

object obj =Factory.GetValue();
int num = obj as int;

上記のコードを実行した後与えられ、そしてなぜでしょうか?これは、OBJの値はint型の戻りヌルのではなく、int型はnull値を受け入れることができないときためです。したがって、指定されたタイプがヌル値として許容されない場合にキャストすることはできません。

第二に、問題

それは自動的に反復プロセスで変換された非ジェネリックシーケンスのforeachの順序を知っているここでは、問題について考え、我々はすべてのため、foreachの型変換はそれとして使用するか、またはそれをキャストしていますか?
foreachのキャストを使用する場合、使用は値型と参照型に対処するforeachの必要性を落としているため理由は、ループの所望のタイプのオブジェクトにオブジェクトを入力します。

第三に、要約

その答えは、我々はキャスト、キャストと予想される結果が発生する可能性があり、開発者を越えたいくつかのケースでを利用するのは避けるべきとき発展に与えられ、実際に型キャストすることができ、オブジェクトを確保できる演算子として使用されますそのプログラムの正しさを保証することができます。

ブログ記事複数のプラットフォームからこの記事OpenWriteリリース!より多くの記事スキャンコード懸念「ニャーT-ヨ」ここに画像を挿入説明

おすすめ

転載: www.cnblogs.com/gangzhucoll/p/12327574.html