「タイプセーフ」と「強く型付けされていますか」は同じことを意味しますか?"タイプセーフ"と "強く型付けされた"というのは同じことを意味しますか?
答えて
あなたの用語の定義にもよりますが、必ずしもそうではありません。非常に明確かつ広く受け入れられている定義はありません。
たとえば、動的プログラミング言語は型保護されていますが、厳密に型指定されていないことがよくあります。言い換えれば、コンパイル時の型情報は、型で何ができるかできないかを決定するものではありませんが、実行時に、ある型を他の型と同じように使用しないようにします。あなたが行うことができますC#4.0に、例えば
、:
dynamic foo = "hello";
dynamic length = foo.Length; // Uses String.Length at execution time
foo = new int[] { 10, 20, 30 };
length = foo.Length; // Uses Array.Length at execution time
dynamic bar = (FileStream) foo; // Fails!
最後の行は、それがタイプセーフであることへの鍵です:FileStream
にint配列からの安全な変換、その操作はありません配列オブジェクトのバイトをのように扱うのではなく、FileStream
だったのです。
EDIT:C#は通常、「強く型付けされた」(型として)と型セーフです。コンパイラはオブジェクトに対して任意の呼び出しを行なわせることはできません。また、ランタイムは不適切な変換。
安全でないコードがどこに収まるかは完全にはわかりません - 私はそれについて十分には分かりませんが、私は恐れています。
C#4の動的型定義では、上記のように、弱く型付けされていても型保証型のコードが使用できます。 foreach
はそれをハイブリッドのようなものを作り、暗黙の型変換を実行することを
注:これは、コンパイルされます
ArrayList list = new ArrayList();
list.Add("foo");
foreach (FileStream stream in list)
{
...
}
(そこに最近、この上another questionだった)が、実行時に失敗します。皮肉なことに、の変数に対して、を強く型付けしようとしているからです。つまり、イテレータの結果をキャストする必要があります。
Jonは、C#に関して、plsが(もし時間があれば)ビットを定義/説明することができます。 – Wondering
Hm、 "タイプセーフ"の定義のような音は、実行エンジンが間違ったタイプだと思うデータにアクセスしないことを意味します。私はこれに驚いています。その定義によって、C#のジェネリックスは、exampeのために非ジェネリックArrayListを使用するのと比較して型安全性を追加しないためです。ジェネリックは厳密な型指定だけの例ではあるが、型の安全性の例ではないとお考えですか? – Timwi
@Timwi:CLRはどちらの場合でも型の安全性を提供しますが、より高いレベルで見ることができます: 'ArrayList'から値を抽出した結果をキャストする必要がある場合、そのキャストは失敗する可能性があります。それはかなり安全な方法で失敗しますが、 "リストから文字列値を取得する"という行為は、 'List
「タイプセーフ」とは、キャスティングが伴わず、実行時エラーが発生しないことを意味します。
「強く型付けされた」とは何も意味も、「それは良い」、「私はそれに慣れている」と主張する人もいます。
「タイプセーフ」は、コードやAPIの一部に関連しています。「厳密に型指定された」とは、言語やプラットフォーム全体を指します。
実際には、型の安全性はコンパイル時に型チェックが実行されることを意味しません。 *どこかで*実行されている限り、それはすべて良いです。 – Noldorin
良い質問です。 this Wikipediaのエントリを読んで、ここエキスです:私は並べ替えしようとしている...数週間過ごした」、
ベンジャミン・C・ピアス、タイプ と言語と高度な タイプとプログラミング言語プログラミングの著者は言う 「強く 型付き、」「静的に型付けされた、」「安全」 などの用語うち とは、驚くほど ....これらの用語 の使用量が無駄にほとんど それらをレンダリングするように、様々な困難であるました。「
彼らはそれは解釈の問題だ、基本的に同じである:
ウィキペディアから:
型の安全性は、多くの定義の一つと同義です。型の安全性と動的型付けは相互に互換性がありますSmalltalkのような動的型付き言語は強く型付けされた言語と見なすことができ、正しいプログラムは適切にタイプされています。動的セマンティクスが適切な意味で「間違っている」ことがない限り、それは上記の定義を満たし、型安全と呼ぶことができます。
ype safeは、プログラムがオブジェクトのパブリックプロパティの境界外のメモリにアクセスするのを防ぐことを意味します。コードが型安全でない場合、望ましくない副作用が発生する可能性があります。タイプセーフティは、アセンブリの分離とセキュリティの実施に重要です。コードが型に安全な場合、共通言語ランタイムはアセンブリを互いに完全に分離できます
- 1. 動的型と強く型付けされた要素
- 2. これら2つの文は同じことを意味しますか?
- 3. タイムアウトの質問。強く型付けされたデータセットとオブジェクトデータソース
- 4. MVC6強く型付けされたアクションのリンクとビュー
- 5. ASP.NET MVC多態性と強く型付けされたビューMVC
- 6. 強く型付けされたデータバインディングとジェネリック?
- 7. MongoDB強く型付けされたフィルタとFind()
- 8. これと同じではない、またはLuaでの意味
- 9. 強く型付けされたRadioButtonlist
- 10. 強く型付けされたList.GroupBy()
- 11. 強く型付けされたURLアクション
- 12. 「基本データ型」と「組み込みデータ型」は同じ意味ですか?
- 13. 強く型付けされた言語の違いは?
- 14. MVCアプリケーションで強く型付けされたビューで特定の行のデータを取得する方法..? (クラス名と強く型付けされたビュー:BusDetails.cs)
- 15. バルク更新は強く型付けされたデータセットですか?
- 16. 強く型付けされたビューはいつ使うべきですか?
- 17. 強い型付けされたコンテナ
- 18. 「ハードコードされた」とはどういう意味ですか?
- 19. 同じプロトコルのインスタンスを受け付けないメソッドの型としてスウィフトプロトコルが使用されました
- 20. 強く型付けされたクライアント側の言語ですか?
- 21. C++:要素と値という用語は同じ意味ですか?
- 22. 本当に強く型付けされた型のプロバイダ
- 23. フロー+ Redux:デフォルトデフォルトのアクションと強く型付けされたアクションのエラー
- 24. MVC先物強く型付けされたRenderActionと私はMVC先物ライブラリ</p> <p>から強く型付けされた自然の中でHtml.RenderActionを使用しようとしているコントローラ名と
- 25. MongoDBドライバC#強く型付けされたネストされたインデックス
- 26. 別のブラウザとは、同じマシンとは別のクライアントを意味します。
- 27. &または&または&はコード内で同じことを意味しますか?
- 28. ASP.Net MVCは部分的なビューと継承されたプロパティを強く型付けしました
- 29. 強く型付けされたカスタムヘルパーメソッドを作る方法は?
- 30. C#MongoDBドライバは強く型付けされたフィルタの使用
これはコミュニティのWikiではありませんか? – Linuxios