2012-01-05 6 views
2

誰でも私にタイプキャスティングの定義を教えてもらえますか?タイプキャスト&タイプ変換

私は材料をオンラインで探してみましたが、正確にタイプキャスティングが必要な理由とその使用方法を説明できるものは見つかりませんでした。

例は素晴らしいでしょう!

+3

私たちはどの言語について議論していますか? –

+1

-0。幅広く、Googleで入力できるものなどがあります。私はこれをdownvotingのためのポイントを失うように感じることはありません。 – Gabe

+0

私はあなたがポイントをダウン投票を失う​​ことは間違いないと確信しています。 –

答えて

1

タイプキャストは、オブジェクトを特定のタイプに強制するメカニズムです。素人の言葉では、それは郵便受けからの手紙(要約)を拾ってそれを法案(具体的、具体的)に強制する。

多くの抽象化を扱うので、これはソフトウェア開発には一般的に関係します。したがって、特定のオブジェクトのプロパティを検査し、そのオブジェクトの実際の具体的な型をすぐには知りません。

たとえば、特定のコントロールにリンクされているデータソースの内容を調べることができます。 (C#であなたが得ることができる限り抽象的である)

object data = comboBox.DataSource; 

.DataSourceプロパティは型である「オブジェクト」DataSourceプロパティが異なるコンクリートの型の範囲をサポートしており、プログラマを許可するように望んでいるので、これがあります使用する広範囲のタイプから選択してください。

私の試験に戻ります。このオブジェクトタイプでは、「オブジェクトデータ」でできることはあまりありません。これらは、C#でクラスオブジェクトに定義された唯一のAPIがあるためだ

data.GetType();  // tells me what type it actually is 
data.ToString(); // typically just outputs the name of the type in string form, might be overridden though 
data.GetHashCode(); // this is just something that gets used when the object is put in a hashtable 
data.Equals(x);  // asks if the object is the same one as x 

。より興味深いAPIにアクセスするには、オブジェクトをより具体的なものにCASTする必要があります。 (キャストが働いていた場合)

ArrayList list = (ArrayList) data; 

は、今私は配列リストのAPIを使用することができます。 だから例えば私が知っている、場合、オブジェクトは、私は1つにキャストすることができますArrayListのです。だから私は次のようなことをすることができます:

list.Count; // returns the number of items in the list 
list[x]; // accesses a specific item in the list where x is an integer 

私が上に示したキャストは「ハード」キャストとして知られています。それはオブジェクトを私が望むデータ型に強制し、キャストが失敗した場合(C#では)例外をスローします。したがって、通常は、オブジェクトがそのタイプであるか、またはそのタイプであることを100%確信しているときにのみ使用します。

C#は、キャストが失敗した場合にnullを返す「ソフト」キャストとしてもサポートされています。

ArrayList list = data as ArrayList; 
if(list != null) 
{ 
    // cast worked 
} 
else 
{ 
    // cast failed 
} 

タイプが不明で、複数のタイプをサポートしたい場合は、ソフトキャストを使用します。

あなたはcomboBoxクラスの作者であると言います。あなたは、おそらく多くの異なる種類をサポートするためのソフトキャストを使用してコードを書くと思いますので、その場合は、あなたは.DataSourceの異なるタイプをサポートすることがあります:あなたに型キャストを説明するのに役立ちますし、それが関連している理由を

public object DataSource 
{ 
    set 
    { 
    object newDataSource = value; 
    ArrayList list = newDataSource as ArrayList; 
    if(list != null) 
    { 
     // fill combobox with contents of the list 
    } 
    DataTable table = newDataSource as DataTable; 
    if(table != null) 
    { 
     // fill combobox with contents of the datatable 
    } 
    // etc 
    } 
} 

・ホープいつそれを使うのですか?:)

関連する問題