2012-03-13 14 views
1

私はC#コースを受講しており、次のトピックが私の心の中に現れてきました。うまくいけば、それを取り除くための時が来ています。プログラミング言語?プログラミング言語でのタイプ化の意味

タイプセーフな言語を構築する意思の背後にある理由/モチーフは何か、私が思いつく究極の答え(たぶん唯一のもの)は次のようなものです。私たちのプログラムで使用するデータにコンパイル時の制約を課すことで、IDE /コンパイラが他の方法では見逃してしまうエラーの防止/検出を助けることができます。 。これらのエラーの中には、無効な操作、無効なメンバーアクセスなどがあります。

私はこの点までは、次のように質問します。C#などのキャストではどういう意味ですか? Object型のパラメータを取ることで定義されたメソッドがあり、その型(つまり、任意の型)の派生を渡します - この時点で何が起こっているのでしょうか?

私は、タイピングによって、どのオブジェクトのインスタンスでどのメンバーにアクセスできるかを制限することができます。言い換えれば、コンパイラは、検証ルールを実行/適用するために受け取ったインスタンスではなく、変数の型を常に見てから、エラーメッセージを出さないことを前提としています。これは正しいですか?次の例では、変数型がObjectであるため、インスタンスの型へのキャストを実行しない限り、コンパイラはインスタンスメンバーにアクセスできません。私がここで明確にしたいのは、キャストが実行されているかどうかに関わらず、そのインスタンスがそのタイプを保持していて常に保持するということです。私の理論に従えば、コンパイラは私たちの仕事を助けるためのツールであり、私たちのプログラムを構築する各ステップで承認されたツールであり、このコードは実際には100%信用/ "安全"。

私は前述の多型に着目して考えると、より特殊な型のインスタンスを保持するより一般的な型は、インスタンスメンバにアクセスするリスクがないため、コンパイラエラーにはなりませんそれはより一般的な型では定義されていません。なぜなら、より専門化されたものはすべてそれらを継承するからです(上書きするかどうか、あるいは隠すかさえ)。プログラマーがインスタンス内の特殊なメンバー(存在しないでしょう)に間違いなく誤ってアクセスする可能性があるため、もう一方の方法(タイプがより特殊化されてからインスタンスになるとき)は問題になります。

最後のメモとして、すべてのインスタンスがメモリブロックを割り当てていると思います(必然的に連続しているかどうかわかりません) - サイズ、サイズメンバーの合計メモリ要件/ヘッダー情報、何でも) - すべてのメンバー定義は、特定のメンバーにアクセスするためにインスタンスにアクセスするときに使用される特定のメモリーアドレスを生成します(変数、メソッドなど)。

上記の仮定は間違っていますか? (あるいは私は質問しなければなりません...どちらか正しいですか:)

+0

あなたは[タイプシステムに関するウィキペディアの記事](http://ja.wikipedia.org/wiki/Type_system)に興味があるかもしれません。特に、動的タイピングと静的タイピングに関するセクションは、あなたの質問に非常に関連しています。 – ruakh

+0

ありがとう、私は実際にこのディスカッションが私がそれを読んだ後に形を取るようになったと思うが、私はそれを徹底的に読んでいない。見ています。 – Veverke

答えて

0

答えは、プログラミング言語でタイプする理由をよく理解しています。

関連する問題