JavaをベースにC#の基本文法を比較的学習します。

新しい言語を学習する場合、重要なのは、新しい言語と以前に習得した言語の違いを学ぶことですが、前の言語の事柄に自分の思考モードを固定させず、新しい言語のプログラミングの考え方に目を向けることです。 。
Java と C# はどちらもオブジェクト指向言語であり、非常によく似ているため、比較しながら C# を学習してみましょう。
ここに画像の説明を挿入

1. リードパッケージ

  using System;  //java用import

2 番目に、コンストラクター

Javaと同じ構文

public class Student
{
    
    
	public Student(){
    
    
		
	}
}

3. デストラクター

コンストラクターと同様に、C# のデストラクター (「ファイナライザー」とも呼ばれます) もクラス内の特別なメンバー関数であり、主にガベージ コレクターがクラス インスタンスを再利用するときに必要なクリーンアップ操作を実行するために使用されます。
変数とクラス オブジェクトにはライフサイクルがあり、ライフサイクルが終了すると、これらの変数とオブジェクトは失効します。
クラスのオブジェクトが破棄されると、デストラクターが自動的に呼び出されます。一部の後続作業はデストラクターで実行できます。

デストラクターの名前もクラス名と同じですが、名前の前にチルダ ~ を付ける必要があり、戻り値の型やパラメーターはありません。次のように:

class Car
{
    
    
	~Car()  // 析构函数
	{
    
    

	}
}

C# のクラス デストラクターは明示的に呼び出すことはできません。ガベージ コレクターが未使用のオブジェクトを破棄するときに自動的に呼び出されます。

4.C#のデータ型

広い観点から見ると、C# 言語のデータ型は、値型、参照型、ポインター型、およびポインター型は安全でないコードでのみ使用されるという 3 つの型に分類できます。
C# は、Java と同様に自動ガベージ コレクターを備えた CLR で実行されます。

1. 値型
単純型:

  • 数値型:整数型、文字型(char)、浮動小数点型、10進数型(decmal)
  • ブール型(bool)

(1) 単純型も構造型であるため、コンストラクター、データ メンバー、メソッド、属性などが存在するため、次のステートメント
int i=int.MaxValue; string s=i.ToString() は正しいです
。これは定数です。C# でも構造体型のインスタンスが生成されるので、構造体型のメソッドも使用できます。たとえば、
string s=13.ToString() が正しいです。
(2)

予約語 System 名前空間の名前 バイト 範囲
エスバイト System.Sbyte1 1 -128~127
バイト システム.バイト 1 0~255
短い System.Int16 2 -32768~32767
ウーショート System.UInt16 2 0~65535
整数 System.Int32 4 -2147483648~2147483647
単位 System.UInt32 4 0~4292967295
長さ System.Int64 8 -9223372036854775808~9223372036854775808
System.UInt64 8 0~18446744073709551615
文字 System.Char 2 0~65535
浮く System.Single 4 3.4E-38~3.4E+38
ダブル System.Double 8 1.7E-308~1.7E+308
ブール System.Boolean (真/偽)
10進数 System.Decimal 16 ±1.0×10?28~±7.9×1028

(1) 10 進数型は、金融関連分野で使用できる高精度浮動小数点数を表現するために使用されます。
(2) 浮動小数点数は精度が落ちるという問題がありますので、運用時には注意してください。
(3) 文字種は Unicode 文字セットを採用しており、Unicode 標準文字の長さは 16 ビットです。
(4) 整数型は暗黙的に文字型 (char) に変換できません。Java とは異なり、Unicode で変換または表現する必要があります。 ( 5)
Boolean 型は false と true の 2 つの値を持ちます。整数 0 が false であり、他の値が true であるとは考えられません。
bool x=1 は間違っています。そのような書き方はありません。x=true または x=false としか書くことができません。

構造体の型 (Struct 型)
(1) 構造体型は、クラスと同様に、コンストラクター、データ メンバー、メソッド、属性などを宣言できます。
(2) 構造体とクラスの最も基本的な違いは、構造体が値型であり、クラスが参照型であることです。
(3) クラスとは異なり、構造体は他の構造体やクラスから派生したり、継承したりすることができないため、抽象構造体を定義したり、アクセス制御語 protected で構造体メンバを変更したり、仮想構造や抽象構造を定義したりすることはできません
。構造メソッドを変更するために使用されます。
(4) 構造体中にデストラクタを定義することはできません。
(5) クラスと構造体から構造体を派生することはできませんが、構造体はインターフェースを継承することができ、インターフェースを継承する構造体のメソッドはインターフェースを継承するクラスのメソッドと基本的に同じです。
例:

using System;
//结构定义
struct point{
    
    
	public int x,y;//结构中也可以声明构造函数和方法,变量不能赋初值
}
class Test{
    
    
	static void Main(){
    
    
		point P1;
		P1.x=166;
		P1.y=111;
		point P2;
		P2=P1;//值传递,使P2.x=166,P2.y=111
		point P3 = new point();//用new生成结构变量P3,P3仍为值类型变量
//用new生成结构变量P3仅表示调用默认构造函数,使x=y==0。
	}
}

列挙型 (列挙型)
C# の列挙型の使い方は基本的に C や C++ の列挙型と同じで、Java とは大きく異なります
(1) 列挙型の定義

//设置初值,从1开始
enum Days {
    
    Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};
//位设置初值,从0开始  
enum Days {
    
    Sat, Sun, Mon, Tue, Wed, Thu, Fri};

(2) 列挙型を使用する

 Days day=Days.Tue;
int x=(int)Days.Tue;

(3) C および C++ とは異なり、C# の列挙要素の型は byte、sbyte、short、ushort、int、uint、long、および ulong にすることができますが、char 型は使用できません

   enum Days:byte{
    
    Sun,Mon,Tue,Wed,Thu,Fri,Sat};//元素为字节类型

変数の初期値: 一般的な単純型の初期値は 0、ブール型は false、参照型は null です。

複雑な構造型の場合、このように各データメンバーに値を割り当てるのは非常に面倒です。
数値型はすべて構造型であるため、数値型変数は、new ステートメントでコンストラクターを呼び出すことによって初期化できます (
例: int j=new int())。
new ステートメントを使用しても int 変数が参照変数に変わるわけではないことに注意してください。j は依然として値型変数であり、
ここでは new はそのコンストラクターを呼び出すだけです。すべての数値型にはデフォルトのパラメーターなしのコンストラクターがあり、その機能はデフォルト値を持つ数値型に初期値を割り当てることです。
カスタム構造体タイプの場合、デフォルトのパラメーターなしコンストラクターがあるため、パラメーターなしコンストラクターは定義できませんが、パラメーター化されたコンストラクターは定義できます。

2. 参照型の分類

  • クラス: 一部のクラスは C# 言語で事前定義されています: オブジェクト クラス (オブジェクト クラス)、配列クラス、文字列クラス、カスタム クラスなど。
  • インターフェイス
    C# 言語の参照型変数がどのように定義されても、それは常に参照型変数であり、値型変数にはなりません。
    C# 言語の参照型オブジェクトは通常、演算子 new を使用して作成され、オブジェクトの参照には参照型変数が使用されます。

(1) オブジェクトクラス(オブジェクトクラス)
C# のすべての型(数値型を含む)は、直接的または間接的にオブジェクトクラスに基づいています。
オブジェクト クラス (オブジェクト クラス) は、他のすべてのクラスの基本クラスです。どのクラス定義でも、基本クラスが指定されていない場合、デフォルトでは object が基本クラスになります。
C# 言語では、基本クラスの参照変数は派生クラスのオブジェクトを参照できると規定されているため (派生クラスの参照変数は基本クラスのオブジェクトを参照できないことに注意してください)、任意の型の値を割り当てることができます
。オブジェクト変数に

object キーワードは名前空間 System で定義され、System.Object クラスのエイリアスです。

(2) 配列
C# 言語の配列は System.Array クラスのオブジェクトであり、Java での配列の使い方と基本的に同じですので説明は省略します。(3) 文字列: Java API の関数と同様に、比較して学ぶことができます。これで、概要を理解して、使用するときに確認できます。C#では、特に次の目的で使用される基本的なクラス文字列
も定義されています。
文字列操作。
このクラスは、クラス System.String の別名である名前空間 System でも定義されています。2
つの文字列の比較では値が比較されます: string a, b; a==b ですが、Java では比較はハッシュコードであることに注意してください。

5. ボックス化とボックス化解除


ボックス化とアンボックス化は、C# 言語の型システムで提案されている中心概念であり、ボックス化は値型からオブジェクト (オブジェクト) 型への変換、アンボックス化はオブジェクト (オブジェクト) 型から値型への変換です。ボックス化とアンボックス化の概念により、最終的には任意の型の変数をオブジェクト型とみなすことができます。

これは、Java ではボックス化解除とボックス化操作、Java では自動ボックス化解除として理解できます。これには手動操作が必要です。C
# ではより広範なため、使用する際にはゆっくりと理解する必要があります。

6. オペレーター

Java とほぼ同じなので、矛盾がある場合は直接確認してください。
(1) typeof 演算子: この演算子は、システム名前空間で定義されている指定された型の型名を取得するために使用されます
例:
Console.WriteLine(typeof(System.Int32));
出力は次のようになります:
System.Int32
(2) ) オーバーフロー チェック演算子 チェックすると、
整数算術演算 (+、-、​​、/ など) を実行したり、ある整数型から別の整数型に明示的に変換したりすると、演算結果が型の値の範囲を超える場合があります。この状況は
オーバーフローと呼ばれます。整数算術式では、チェック付きまたはチェックなしのオーバーフロー チェック演算子を使用して、コンパイル時および実行時に式のオーバーフローをチェックするかどうかを決定できます。
式でオーバーフロー チェック演算子が使用されていないか、チェックされた演算子が使用されている場合、定数式はオーバーフローし、コンパイル時にエラーが生成されます。式に変数が含まれており、プログラムの実行中に式がオーバーフローした場合は、例外メッセージが表示されます。が生成されます。ただし、チェックされていない演算子を使用する式ステートメントの場合、式がオーバーフローした場合でも、
コンパイル時および実行時にエラー プロンプトは表示されません。ただし、これにより予期しない結果が生じることが多いため、チェックされていない演算子を使用する場合は注意してください。
次の例は、チェック済み演算子とチェックなし演算子の使用法を示しています。

using System;
class Class1{
    
    
	static void Main(string[] args){
    
    
		const int x=int.MaxValue;
		unchecked//不检查溢出
		{
    
    
			int z=x*2;//编译时不产生编译错误,z=-2
			Console.WriteLine("z={0}",z);//显示-2
		}
		checked//检查溢出
		{
    
    
			int z1=(x*2);//编译时会产生编译错误
			Console.WriteLine("z={0}",z1);
		}
	}
}

(3) new 演算子と java
の違いは、値型(基本データ型)の変数が作成できることと、java ではオブジェクトのみ作成できることです。
new 演算子は、値型変数、参照型オブジェクトを作成し、コンストラクターを自動的に呼び出すことができます。
例:
int x=new int();//new を使用して整数変数 x を作成し、デフォルトのコンストラクター
Person を呼び出します C1=new Person ();//new を使用して Person クラス オブジェクトを作成します。パーソン変数 C1 オブジェクト参照
int[] arr=new int[2];//配列もクラスです。配列オブジェクトを作成します。arr は配列オブジェクトへの参照です。 int x=new int() であることに注意してください
。ステートメントは自動的に呼び出されます。 パラメーターのない int 構造体のコンストラクターは、x に初期値 0 を代入します。x は値型変数のままであり、
参照型変数にはなりません。

7、制御文

制御文は Java とほぼ同じです。ここだけが違います。抜けがあるかもしれません。修正してください。使用には経験が必要です。これは、
Java から C# への簡単な学習プロセスです。
(1) foreach (式に変数名を入力) ループ文 式は
配列などのコレクション型であり、サイクルごとに配列などのコレクションからデータを1つずつ取り出し、
指定した型の変数に代入します。で使用できます。変数はループ ステートメントで使用および処理されますが、変数を変更することはできません。
指定された変数の型は、式で表される配列またはその他のコレクションのデータ型と一致している必要があります。 。
例:

using System;class Test()
{
    
    
	public static void Main(){
    
    
		int[] list={
    
    10,20,30,40};//数组
		foreach(int m in list)
			Console.WriteLine("{0}",m);
	}
}

1 次元配列の場合、foreach ステートメントのループ順序は、添え字が 0 である要素から配列の最後の要素までです。
多次元配列の場合、要素の添字は右端の次元から増分されます。同様に、break および continue は foreach ステートメント内に出現できますが、関数は変更されません
(2) 例外処理ステートメントは java、try、catch、finally と同じです。
ここに画像の説明を挿入

8、クラスの継承

(1) Java のクラスの継承とほぼ同じで、いずれも単一継承であり、コンストラクタの継承はできませんが、親クラス: パーソン サブクラス:従業員サブクラスと
構文形式が異なり、以下のように定義されます。


class Employee:Person{
    
    

}

(2) Base キーワードは
Java の super キーワードと同様に使用されます。
(3) クラスのメンバの型
ローカル変数:for 文や switch 文などの文やクラスメソッドで定義された変数は、指定された範囲内でのみ有効です。
フィールド: クラス内の変数または定数。静的フィールド、インスタンス フィールド、定数、読み取り専用フィールドが含まれます。
メソッド メンバー: 静的メソッドとインスタンス メソッドを含みます。
属性: 属性で指定された get メソッドおよび set メソッドに従ってフィールドの読み取りおよび書き込みを行います。プロパティは本質的にはメソッドです。
イベント: イベント自体を表し、同時にイベントとイベント処理関数に連絡します。
インデックス ポインター: 配列を使用する場合と同様に、クラス内のデータ メンバーにアクセスできるようにします。
演算子のオーバーロード: 演算子をオーバーロードする方法を使用して、クラス内に固有の操作を定義します。
コンストラクターとデストラクター。
(4)
修飾子c#とjavaのクラス修飾子の比較

C# ジャワ
プライベート このクラスのみがアクセス可能 このクラスのみがアクセス可能
保護された このクラス、派生クラス このクラス、サブクラス、同じパッケージ
公共 外部プログラム このプログラム
内部 このプログラム なし
保護された内部 保護されたまたは内部に準拠する なし
デフォルト なし このクラス、同じパッケージ

(5) フィールドと属性
フィールド: 変数または定数
属性: get および set メソッド (Java と異なり、Java では set メソッドおよび get メソッドを持つメンバー変数を属性と呼びます。ここでの理解が間違っている可能性があります) (6) 静的
フィールド
: static で宣言されたフィールド (Java の static 変数と同じ)
インスタンス フィールド: 通常の変数 (Java のメンバー変数と同じ) 定数
: const 変更で宣言された定数 (static Final と同じ) Java での変更
読み取り専用フィールド: 宣言されたフィールドを変更するには readonly を使用します。フィールド宣言またはコンストラクターでのみ割り当てることができます。Java には対応する定義がありません。
(7) C# の属性 属性は
フィールドではありませんが、クラス内の 1 つまたはいくつかのフィールドに関連付けられている必要があり、関連付けられたフィールドを取得および変更するためのメソッドを定義します。C# の属性は、オブジェクトのカプセル化をより完全に反映しています。クラスのデータ コンテンツは直接操作されませんが、アクセサーを通じてアクセスされ、属性の値は get メソッドと setメソッド
を使用して読み書きされます。
属性値にアクセスする文法形式は基本的に変数にアクセスするのと同じであるため、属性へのアクセスは変数へのアクセスと同じくらい便利であり、習慣に従っています。クラスの基本概念に関するセクションでは、個人的な状況を説明するクラス Person を定義します。ここで、フィールド名と年齢はプライベート フィールド、レコード名と年齢です。これら 2 つのプライベートフィールドは、パブリック メソッド SetName および SetAge を通じて外部から
変更します。
次に、属性を使用して名前と年齢を記述します。例は次のとおりです。

using System;
public class Person
{
    
      private string P_name="张三";//P_name是私有字段
	private int P_age=12;//P_age是私有字段
	public void Display()//类的方法声明,显示姓名和年龄
	{
    
      Console.WriteLine("姓名:{0},年龄:{1}",P_name,P_age);
	}
	public string Name//定义属性Name
	{
    
      get
		{
    
      return  P_name;}
		set
		{
    
      P_name=value;}
	}
	public int Age//定义属性Age
	{
    
      get
		{
    
      return  P_age;}
		set
		{
    
      P_age=value;}
	}
}
public class Test
{
    
      public static void Main()
	{
    
      Person OnePerson= new Person();
		OnePerson.Name="田七";//value="田七",通过set方法修改变量P_Name
		string s=OnePerson.Name;//通过get方法得到变量P_Name值
		OnePerson.Age=20;//通过定义属性,既保证了姓名和年龄按指定方法修改
		int x=OnePerson.Age;//语法形式和修改、得到一个变量基本一致,符合习惯
		OnePerson.Display();
	}
}

属性のアクセス ステートメントでは、set アクセサーのみが属性の値が設定のみ可能で読み取りできないことを示し、get アクセサーのみが属性の値が読み取り専用で書き換えできないことを示し、両方ともset アクセサーとゲット アクセサーは、
属性値の読み取りと書き込みの両方が許可されていることを示します。
属性とフィールドの構文は比較的似ていますが、属性は本質的にメソッドであるため、属性を変数として使用したり、属性を参照パラメーターまたは出力パラメーターとして渡すことはできません。

9、メソッドパラメータの種類

C# にはより多くのパラメーターの型があり、Java よりもはるかに複雑です

  • メソッド修飾子には、new、public、protected、internal、private、static、virtual、sealed、override、abstract、extern が含まれます。
  • C# 言語のメソッドでは、次の 4 つのパラメータを使用できます (パラメータのタイプの違いに注意してください):
    修飾子のない値パラメータ。
    参照パラメータは ref 修飾子を使用して宣言されます。
    出力パラメータ。 out 修飾子を使用して宣言されます。
    配列パラメータ。params 修飾子を使用して宣言されます。

1. 値パラメータ
(1) 値パラメータを持つメソッドにパラメータを渡すとき、プログラムは実パラメータの値のコピーを作成し、そのコピーをメソッドに渡します。呼び出されたメソッドは実パラメータの値を変更しません。したがって、
value パラメーターを使用してください。実際のパラメーターの値は安全であることが保証されています。
(2) パラメータの型がクラスの参照変数などの参照型の場合、オブジェクト参照もコピーに格納されるため、
コピーと実パラメータは同じオブジェクトを参照します。実パラメータによって参照されるデータ メンバーは変更できます。
値パラメータは、Java で渡すパラメータと一致しています。
2. 参照パラメータ
メソッド内ではメソッド外で変数の値を変更したり取得したりする必要がある場合があり、C言語ではメソッドへの実パラメータポインタを使用して目的を達成しますが、C#言語では参照パラメータを使用します。
参照パラメータを使用して実パラメータをメソッドに渡す場合、プログラムは実パラメータの参照、つまりメモリ内の実パラメータのアドレスをメソッドに渡し、メソッドは値を変更または取得します。実パラメータの参照を通じてメソッド外の変数を取得します
参照パラメータは ref 修飾子を使用して宣言されます。実際のパラメータ変数は使用前に初期化する必要があることに注意してください。

これは、C 言語でアドレスを渡し、そのアドレスに従って対応するメモリ空間を見つけて、このメモリ空間の値を変更するのと似ています。
3. 出力パラメータ メソッド
の演算結果を外部変数に格納するには、外部変数の参照(アドレス)を知る必要があります。出力パラメーターは外部変数の参照 (アドレス) をメソッドに渡すために使用されるため、
出力パラメーターも参照パラメーターであり、参照パラメーターとの違いは、メソッドを呼び出す前に変数を初期化する必要がないことです。メソッドが返された後、渡された変数は初期化されたものとみなされます。

これもC言語での複数の戻り値の実装に似ていますが、違いは初期化の問題です。もちろんJavaでも参照の変更は実装できますが、基本的なデータ型に対してのみ行うことができます。基本データ型のカプセル化クラスを使用して実装できます

値パラメータ、参照パラメータ、出力パラメータの使用例を次の例に示します。

using System;
class g{
    
    public int a=0;}//类定义
class Class1
{
    
      public static void F1(ref char i)//引用参数
	{
    
      i='b';}
	public static void F2(char i)//值参数,参数类型为值类型
	{
    
      i='d';}
	public static void F3(out char i)//输出参数
	{
    
      i='e';}
	public static void F4(string s)//值参数,参数类型为字符串
	{
    
      s="xyz";}
	public static void F5(g gg)//值参数,参数类型为引用类型
	{
    
      gg.a=20;}
	public static void F6(ref string s)//引用参数,参数类型为字符串
	{
    
      s="xyz";}
	static void Main(string[] args)
	{
    
      char a='c';
		string s1="abc";
		F2(a);//值参数,不能修改外部的a
		Console.WriteLine(a);//因a未被修改,显示c
		F1(ref a);//引用参数,函数修改外部的a的值
		Console.WriteLine(a);//a被修改为b,显示b
		Char j;
		F3(out j);//输出参数,结果输出到外部变量j
		Console.WriteLine(j);//显示e
		F4(s1);//值参数,参数类型是字符串,s1为字符串引用变量
		Console.WriteLine(s1);//显示:abc,字符串s1不被修改
		g g1=new g();
		F5(g1);//值参数,但实参是一个类引用类型变量
		Console.WriteLine(g1.a.ToString());//显示:20,修改对象数据
		F6(ref s1);//引用参数,参数类型是字符串,s1为字符串引用变量
		Console.WriteLine(s1);//显示:xyz,字符串s1被修改
	}
}

4. 配列パラメータ
配列パラメータは、params を使用して記述します。
(1) 仮パラメータ リストに配列パラメータが含まれる場合、それはパラメータ リストの最後のパラメータである必要があり、配列パラメータは 1 次元配列のみ許可されます。
たとえば、string[] 型と string[][] 型の両方を配列パラメータとして使用できます
(2) 配列パラメータには ref および out 修飾子を含めることはできません。以下の例を参照してください。

using System;
class Class1
{
    
      static void F(params int[] args)//数组参数,有params说明
	{
    
      Console.Write("Array contains {0} elements:",args.Length);
		foreach (int i in args)
			Console.Write(" {0}",i);
		Console.WriteLine();
	}
	static void Main(string[] args)
	{
    
      int[] a = {
    
    1,2,3};
		F(a);//实参为数组类引用变量a
		F(10, 20, 30, 40);//等价于F(new int[] {60,70,80,90});
		F(new int[] {
    
    60,70,80,90});//实参为数组类引用
		F();//等价于F(new int[] {});
		F(new int[] {
    
    });//实参为数组类引用,数组无元素
	}
}

プログラム出力

Array contains 3 elements: 1 2 3
Array contains 4 elements: 10 20 30 40
Array contains 4 elements: 60,70,80,90
Array contains 0 elements:
Array contains 0 elements:

Javaの変数パラメータの使用法と同様に、パラメータを渡すときは同じですが、定義するときは異なりますが、パラメータの最後のパラメータである必要があります。

5. C# と Java での静的メソッドとメンバー メソッドの使用法は
同じです

10. 演算子のオーバーロード

Javaでは演算子をオーバーロードできません

演算子のオーバーロードとは、C#言語において既存の演算子に新たな機能を与えるものですが、演算子本来の意味に反するものではなく、使用する際は演算子の出現位置によってどのような演算を行うかを判断するだけで済みます
。 。演算子のオーバーロードは実際に演算子関数を定義します。演算子関数宣言の形式は次のとおりです。

static public 函数返回类型 operator 重新定义的操作符(形参表)

C# 言語の一部の演算子はオーバーロードできます (例: + - ! ~ ++ – true false * / % & | ^ << >> == != > < >= <= など)。
ただし、=、&&、||、?:、new、typeof、sizeof、is など、オーバーロードが許可されていない演算子もいくつかあります。

イレブン、このキーワード

this キーワードは、Java での this の使用法と一致しています。
注: Java の super は C# の Base を使用します

12、クラスポリモーフィズム

C# は 2 種類のポリモーフィズムをサポートしています。1
つ目はコンパイル時のポリモーフィズムです。クラスのオブジェクトは同じ名前の複数のメソッドを呼び出します。システムはコンパイル時に、実際のパラメータの型と実際のパラメータの数に従って呼び出すことを決定します。呼び出しメソッド、同じ名前のメソッド、
どのような操作が実現されるか。コンパイル時のポリモーフィズムは、メソッドのオーバーロードによって実現されます。
2 つ目は実行時ポリモーフィズムです。システムの実行中に、異なるオブジェクトが同じ名前、まったく同じタイプと数のパラメータを持つメソッドを呼び出して、異なる操作を完了します。
C# の実行時のポリモーフィズムは、仮想メソッドを通じて実装されます。クラスのメソッド宣言の前に仮想修飾子を追加することを仮想メソッドと呼び、その逆を非仮想メソッドと呼びます。

1つ目のポリモーフィズムはJavaと同じですが、使い方が異なります。メソッドが実行されると基底クラスのメソッドが実行されます。2つ目の
ポリモーフィズムはJavaとは異なり、サブクラスの継承も異なりますが、 Javaの継承と同じ意味。
基本クラスの戻り値は virtual キーワードで変更され、派生クラスが継承する場合は変更する戻り値の前に override キーワードが追加されます。

13. 抽象クラスと抽象メソッド

Javaと比較すると基本的に同じですが、書き方が少し異なります Javaはアノテーションが使えますが、C#はアノテーションが使えるかはわかりません

14. シールの種類とシール方法

C#でsealedで変更されたクラスやメソッドはsealedクラス、sealedメソッドと呼ばれますが、javaのfinalで変更されたクラスやメソッドと同じで継承できません。

15. インターフェース

Java でのインターフェイスの意味と使用法はほぼ同じですが、C# ではインターフェイス内にメソッド、プロパティ、インデックス インジケーター、イベントを含めることができますが、これらに定数、フィールド、演算子、コンストラクター、デストラクターを含めることはできず、その他の要素を含めることもできない点が異なります。静的メンバー。
ここに画像の説明を挿入

16. 代表者

ここで紹介したいのは、C# の参照型 - delegate (デリゲート)、デリゲートとも訳され、Java ではプロキシとして使用でき、c ではポインタ転送として理解できます。構文を確認してくださいあなた自身、それは比較的簡単です

17. イベント

イベントは C# 言語の組み込み文法であり、イベントを定義および処理でき、コンポーネント プログラミングを使用するための優れた基盤を提供します。

18、イベント駆動型

Windows オペレーティング システムは、ユーザーのアクションをメッセージとして認識します。メッセージは、マウスの左ボタンでボタンをクリックしてマウス クリック ボタン イベントを送信するなど、C# ではイベントと呼ばれます。
Windows オペレーティング システムは、すべてのイベントを統合管理し、実行中のさまざまなプログラムにイベントを送信します。各プログラムはイベント関数を使用してイベントに応答します。これはイベント駆動とも呼ばれます。
基本的には Android のボタンなどのビューイベントの処理と似ています。

19. インデックスインジケーター

C# 言語では、配列もクラスです。たとえば、整数の配列を int[] arr=new int[5] と宣言すると、実際には配列のようなオブジェクトが生成されます。arr はこのオブジェクトの参照 (アドレス) です。これにアクセスするには、
配列要素のメソッドは次のとおりです: arr[subscript]、配列クラスで、要素にアクセスするためにインデックスを使用する方法は?
独自のクラスを定義し、インデックスを使用してクラス内のデータ メンバーにアクセスできますか? インデックス インジケーター (インデクサー) は、インデックスを通じてクラスのデータ メンバーにアクセスする便利な方法を提供します。

これは自分で定義した配列であることがわかり、その中の要素には次の表からアクセスできます。

20. 名前空間ネームスペース

使用法は Java の package に似ています。
名前空間は、パッケージと同じクラスを一意に識別するためにも使用されます。名前空間は
サブ名前空間を定義でき、パッケージはサブパッケージを定義できます。
名前空間は Java とは異なり、書き方の違いを除けば、名前空間は論理的な分類にすぎません。

21. その他の違い

1. C# ではポインターを使用でき、unsafe キーワードを使用してメソッドまたはコード行を変更できます。これは、これが安全でないコードであり、C ポインターの使用が必要であることを示します。2. C# のメソッド、変数、パラメーターは大文字で表記されます
。一方、javaは小文字です。

C# はよりオブジェクト指向であることがわかりましたが、C と C++ の影はまだ残っています。

要約する

もちろん、上記は C# と Java の基本構文の比較研究にすぎず、これにより Java プログラマーは C# 言語をすぐに学習し、C# プログラムを理解できるようになります。C# SDK の API の学習は、それに対応する Java の学習も行う必要があるため、学習が非常に速くなり、Java への理解も深まります。

おすすめ

転載: blog.csdn.net/weixin_44816664/article/details/130575564