5

C#が強く型付けされた言語なのか、弱く型付けされた言語なのか、誰かが明確にしてもらえますか? そしてその理由を答えてください。

任意のオブジェクトを取ることができる関数が呼び出された場合、concatこれは弱く型付けされていると見なされますか?

function concat(Object stuff)
{
   //do something here to stuff
}
4

6 に答える 6

19

http://ericlippert.com/2012/10/15/is-ca-strongly-typed-or-a-weakly-typed-language/から

C# は強く型付けされた言語ですか、それとも弱く型付けされた言語ですか?

はい。

それは役に立たない。

私はそれを疑いません。興味深いことに、質問を「and」質問に言い換えると、答えは同じになります。

何?つまり、C# は強く型付けされた言語であり、型付けが弱い言語ですか?

はい、C# は強く型付けされた言語であり、弱く型付けされた言語です。

よくわかりません。

私も。おそらく、「強く型付けされた」と「弱く型付けされた」の意味を正確に教えてください。

うーん。これらの用語が何を意味するのか実際にはわからないので、おそらくそれが私が尋ねるべき質問です. 言語が「弱く型付けされた」または「強く型付けされた」とは、実際にはどういう意味ですか?

「弱い型付け」は「この言語は私が不快だと思う型検証システムを使用している」ことを意味し、「強く型付けされている」は「この言語は私が魅力的だと思う型システムを使用している」ことを意味します。

于 2013-02-18T22:00:28.173 に答える
11

C# は厳密に型指定されています。

ECMA-334 は、C# を「C# (「シー シャープ」と発音) は、シンプルで最新のオブジェクト指向でタイプ セーフなプログラミング言語である」と定義しています。

ウィキペディアは型安全性を定義しています

型安全性は、強い型付けの多くの定義の 1 つと同義です。ただし、型安全性と動的型付けは相互に互換性があります。

ウィキペディアでは、強い型付けを次のように定義しています。

コンピューター サイエンスとコンピューター プログラミングでは、異なるデータ型の値を含む操作を混在させる方法について 1 つ以上の制限を指定する場合、型システムは強い型付けを特徴とすると言われています。強い型付けの反対は弱い型付けです。

おそらく、コンパイラが型チェックを行うかどうかについて、「強い」および「弱い型付け」が実際に何を意味するのかについて誰も同意できないため、C# が型安全な言語であるかどうかを尋ねた方がよいでしょう。

C# には利用可能なコンストラクトのような動的言語がいくつかありますが、これらはコンパイル時にタイプ セーフであることは驚くべきことです。

Visual C# 3.0 以降、メソッド スコープで宣言された変数は暗黙的な型を持つことができますvar。暗黙的に型指定されたローカル変数は、自分で型を宣言したかのように厳密に型指定されますが、型はコンパイラによって決定されます。

http://msdn.microsoft.com/en-us/library/bb383973.aspx

キーワードはdynamic基本的に同じように機能しますが、 の場合のようにコンパイル時ではなく実行時に評価されますvar

Visual C# 2010 では、新しい型 dynamic が導入されています。型は静的型ですが、動的型のオブジェクトは静的型チェックをバイパスします。ほとんどの場合、オブジェクト型を持つように機能します。コンパイル時に、動的として型指定された要素は、すべての操作をサポートすると見なされます。

http://msdn.microsoft.com/en-us/library/dd264736.aspx

于 2013-02-18T22:07:31.853 に答える
5

一般に、 C# は厳密に型指定された方法で使用されます。つまり、変数は特定のType型 (string、int、ユーザー定義型など) で宣言され、後で別の型の値を割り当てることはできません。 .

例: C# では次のことはできません。

int i = 10;
i = "ten";

以下のコメントのように、C#は別の方法で使用できます。

「強力な」タイピングを使用すると、エディター/コンパイラーが間違いを警告し、エディターが必要とする可能性が高いものに絞り込んだ提案を行うことができます。

于 2013-02-18T22:07:42.483 に答える
2

強い型と弱い型の両方の定義は非常に多く、使用するときにその用語の意味を定義する必要があります。私が役立つと思う定義は、「言語は、パラメーターなどのタイプを指定するように強制しますか?」です。これにより、C#などの言語が一方に分離され、Javascriptがもう一方に分離されます。この区別が役立つと思います。

「ダックタイピング」などに頼るのではなく、誰かに型の名前を付けるように要求すると、静的分析には利点がありますが、共通の機能を共有する型を指定する場合には欠点があります。このため、これらの言語の多くは、複雑な型関係仕様システムを進化させます。通常、最初のクラスベースのプログラミングと、その後の複雑なテンプレートシステムまたは推論システムにより、プログラマーは「タイプAはタイプBのサブセットです」または「タイプC」などと言うことができます。は、条件DおよびE"などを満たす他のタイプに適用できるメタタイプです。

于 2013-02-18T22:03:47.230 に答える
2

これは、C# コンパイラの主要な開発者の 1 人 (この記事を書いた当時) のブログ記事です。

要するに、質問自体に欠陥があり、現在の形式で合理的に回答することはできません.

于 2013-02-18T21:59:17.673 に答える
1

MSDNによると、C# は厳密に型指定された言語です。

于 2013-02-18T21:59:52.930 に答える