JavaとC#の比較



1。アクセス制御:C#が、実際には、訪問を交換することができます(たとえば、EXE、DLLなど)カテゴリの下にコンパイルコレクションとほとんどのJava、内部表現へのアクセスでそれをパック、Javaのよりもはるかに多くの内部、プライベート、保護、内部、公共持っています。
保護のために、JavaとC#が異なっています。Javaでは、保護されており、パッケージアクセスレベルはほとんど、それはプライベートではありません。C#、ほぼ同じ保護やプライベートで、すなわち、そのロゴのメンバーはプライベートです。
このような状況があります:同じことが他のクラスにアクセスするために(JavaのパッケージまたはC#でコンパイル収集するかどうか)を設定することができますしながら、クラスのメンバー、それはそれを行う方法を、キルトクラスへのアクセスを必要ですか?Javaでは、限り、それはライン上で保護されたとして。C#では、あなたは、保護された内部(両方順不同)を指定することができます。
あるこのような状況では:クラスのメンバ、サブクラスがそれにアクセスする必要があるが、それを行う方法を、他のクラスにアクセスするために同じセット(コンパイルされたJavaパッケージのセットやC#のいずれかで)することはできません?C#では、あなたは(両方順不同)保護を指定することができます。しかし、Javaは何もできません。
2。C#が静的コンストラクタの概念、Javaのような静的初期モジュールを持っています。
C#:静的[クラス名] {}
のJava:{}静的
3。主な機能でJavaが公共の静的な無効メイン(String []型でなければならない引数) それ以外の仮想マシンを実行することを拒否し、見て。C#では、主な機能は、プライベートでも(あるいは保護されていてもよい)、何のパラメータを、int型の戻り値が存在しない場合があります。C言語のようなビット。
4。Csc.exeが100小文字のLの1に続いて、良い機能を発見した、それは警告している:「L」サフィックス簡単で数「1」の混乱を、明確にするため、「L」を使用します。
5.C位変数が動的に一度割り当てられることができ、もはや変更できないように機構を提供します。これは、機能の読み取り専用のキーワードです。
6.javaの継承、多態性の側面、C#のよりもはるかに強いです。Javaのデフォルトの多型は、C#が仮想(継承されたメソッド)とオーバーライド(継承されたメソッド)を追加する必要があり、およびJavaとは異なり、あなたはもっとリラックスしたアクセスを指定することができるようにC#が、元を変更することはできませんアクセス修飾子が必要です。誰かがプログラムを書くためにC#を使用している場合、あなたは多くの場合、仮想およびオーバーライドを取る必要があり、あなたは、元のアクセス制御文字をもコピーする必要があり非常に落ち込んではないでしょうか?誰もがC#のオブジェクト指向の機能を使用していた場合、それは特徴的多型を放棄しますか?これは、多くの混乱ああの原因となります。
多型は、オブジェクト指向の本質であるので、デフォルトでは、より良いJavaのようなことではないのですか?
新しい方法7. C#は、親クラスを非表示にする同じシグネチャとサブクラスのメソッドを指定するために使用されてもよいです。それは余分ではないでしょうか?あなたも行うことができますが、csc.exeは、このような「lan.Other.Main(文字列[])は、」継承されたメンバー「lan.HelloWorld.Main(文字列[])」を隠すように、警告を表示します 。それが意図的に隠されている場合は、キーワードnewを使用します。
デフォルトとして、Javaのようなとても素敵。
しかし、その後、再び、C#が理由のためにそうします。クラスBがクラスA、B次のページを継承する場合(HIと呼ばれる方法が追加されている)、それはB-特異的です。そして、クラスA)(突然、メソッドHIを追加(維持するために他の誰かを想定し、あなたはソースコードを参照することはできません)。あなたはA HI()の戻り値とBのHI()を所有している場合は同じではありません、あなたはライブラリAを更新するとき、実行するプログラムや、エラーがコンパイルできない可能性があります。C#がこの問題を回避するために非常に良い場所です。(...このような問題の確率は非常に小さいものの)
8.C#が継承されるクラスから保護し、密封されたキーワードを使用します。そして、あなたは定数、使用のconstを定義するとき。
最後の輝きを持つJavaの統一のように。
二つの基準変数が同じオブジェクトを指す比較するC#の9はJava = =で使用され、オブジェクトも参照の方法で使用することができません。C#が、あなたはクラスのクラスメソッドを呼び出すために、クラスのインスタンスを使用することはできません、あなたはクラス名を使用する必要があります。したがって、C#のObject.ReferenceEquals(O1、O2)と同等のJava O1 = = O2。
10.C番号なし、元ラッパー型を、だけでなく、Javaのような自動ボックス化解除機能、およびいくつかを提供します。違いは、必要なキャストを開梱、C#自動包装です。
100は=私はint型、
オブジェクトOBJ = I;
私は=(int型)は、obj、
特にどのようにロードされ、除去、我々は知りません。CLRは、オブジェクトがint型に変換されていることを知っているだろう。
11.java内部クラスは、時には便利です。それにC#が、それだけで静的な内部クラスを提供します。これは、外部のクラスは専用の名前空間にのみ同等であることを意味します。それに少し加える可能性がある、外側のクラスのprivateメンバにアクセスするためのC#での内部クラス。
そこ12.C#演算子のオーバーロードがありますが、ネットを通じて一貫性のために、と落胆することはないはずですが。.NET言語の一部がない演算子のオーバーロード、および.NETの目標は、さまざまな言語の違いを排除することですので。
13.C#はそれだけでプリミティブ型のようである、より多くの値型をストラクト。必要な場合、Microsoftはintとしてパッケージのように、Structオブジェクトにパッケージ化するのに役立ちます。あなたはまた、自身のstruct継承をサポートしていませんが、構造体、Objectから継承することを考えることができます。(構造体は、新しい初期化することはできませんが、それは、コンテンツがそのメソッドを呼び出す前に初期化されなければならないのです内;無デストラクタ・メソッドのstruct、デフォルトコンストラクタをストラクトません)。

2007年11月2日
1.javaアクセス制御クラス文字のみ公共、そうでないか(つまり、デフォルト・パケット・アクセス)。しかし、C#で、クラス、およびインタフェースアクセス制御識別子は、内部/ /保護/プライベート/パブリックとすることができる保護された内部。もちろん、あなたが最初のクラスへのアクセスを取得する必要があり、クラスのメンバにアクセスすることが可能です。
C#のコレクションは、ファイル名とは何の関係も複数のパブリッククラスまたはインタフェースを含めることはできません。
2.Cの#インターフェースは、定数、およびJava缶を含めることはできません。
Javaと同じのinstanceofの関数としてで3.C番号。しかし、C#がキーワードとしてより高い効率を提供すると言われています。
C#で4インタフェースと抽象クラスと、ここで抽象クラスインターフェースの設計と区別のデザインはもちろんのこと、Javaで似ています。あなたは、そのようなあなたが彼らのコードを変更する必要があります前に、ユーザーコードを使用して、メソッドの追加などのインタフェースのデザインを変更した場合はそうでない場合は実行してコンパイルすることはできません。それは抽象クラスである場合しかし、あなたは、コードを変更する必要がないユーザーを含むメソッドのデフォルトの実装を提供することができます。
5.C位クラスがインターフェイスを実装する場合、それに関連する方法は、オーバーライドを指定する必要はありません;しかし、クラスが抽象クラスの抽象メソッドを継承する場合、オーバーライド、又は隠さを添加しなければなりません。(事実、唯一の抽象メソッドまたは仮想、またはオーバーライドを被覆するインターフェース方法で。オーバーライドしない理由)
。6。C#で「多型の出発点」の問題があります。クラスがインターフェイスメソッドを実装するが、クラスのインターフェイスは、多型の機能を有し、これまで多重継承した場合、クラスは次のサブクラスを開始仮想マルチ状態を指定する必要がありますオーバーライドは、仮想これ以上、マルチ状態を提供することができるようになります。
しかし、抽象メソッド抽象クラスは限りオーバーライドとしてライン上の多型のデフォルトの出発点以降のサブクラスです。
7.クラスは、2つのインターフェースを実装する場合、2つのインターフェースはメソッドの同一の定義を有する、解決機構は、C#があるが、実現される表示と呼ばれます。単にこのような状況に対処していないのJava、とにかく、呼び出しの後に達成することができるようになりますし、検討するプログラマを残して、どのインタフェースを示すものではありません。
もちろん、C#の表示は、他の機能があります実現しています。例えば、インタフェースは、F A()と呼ばれる方法であり、Bクラスは、Aを実装します これは)インスタンスBは、無料通話のF(することができるであろう理にかなって、そのような要求がある場合:例Bのみ呼び出すことができ、Fとしてキャストされた後は、()。Javaでは、そのような不当な要求が許可されていません。しかし、C#が行うことができ、それは、実装の方法によって示すことです。誰がこの機能を使用するのでしょうか?

ます。https://www.cnblogs.com/yitian/archive/2009/05/27/1490890.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_34268843/article/details/93710359