検索
ホームページバックエンド開発C#.Net チュートリアルC#クラスの構築方法とサンプルコードを詳しく解説

この記事では主にc#クラスの構築方法を紹介します。一定の参考値があるので、以下のエディタで見てみましょう

1. 構築メソッド

クラスの構築メソッドは、クラスのメンバーメソッドの一種であり、その機能は操作を実行することです。クラスのメンバーに対する初期化操作。クラスの建設方法は次のように分けられます。1。

static

建設方法2。インスタンス建設方法

1.静的構造方法クラスはクラス A タイプのメンバー メソッドであり、その機能はクラス内の静的メンバーを初期化することです。以下のコード例を参照してください:

using System;
namespace LycheeTest {
 class Test {
 //定义一个静态成员变量
 private static int a;
 //定义静态构造函数
 static Test() {
  //初始化静态成员变量
  a = 11;
 }
 public void Show() {
  Console.WriteLine("静态字段 a 的值是:{0}", a);
 }
 }
 class Program {
 static void Main(string[] args) {
  Test t = new Test();
  t.Show();
  Console.ReadKey();
 }
 }
}

まず第一に、上記のコードは 2 つのクラスを定義します。 3 行目ではクラス Test を定義しています。クラスを定義する場合、クラスには 2 つのアクセス修飾子があり、1 つはパブリック、もう 1 つは内部です。アクセス修飾子が記述されていない場合、クラスのアクセス許可はデフォルトで内部になります。 このアクセス許可の意味は、このクラスにはこのアセンブリのみがアクセスでき、このアセンブリの外部のクラスはアクセスできないということです。このクラスが

クラス ライブラリ に属している場合は、パブリックである必要があります。そうでない場合、そのクラスを呼び出すアセンブリはそのクラスにアクセスできません。コードの 5 行目は静的フィールド メンバーを定義し、コードの 7 行目は静的コンストラクターです。ご覧のとおり、静的構築メソッドの特徴は、static キーワードがメソッドが静的であることを示し、メソッド名がクラス名とまったく同じである必要があることです。ここでは大文字と小文字に注意してください。 静的構築メソッドにはパラメータを含めることはできず、静的構築メソッドには戻り値を含めることはできません

。静的コンストラクター メソッドの本体で静的メンバーを初期化できます。 11 行目では、静的フィールドの値を出力するインスタンス メソッドを定義しています。このクラスは、16 行目で Program クラスの Main (注: Java では main) メソッドで呼び出され、18 行目でこのクラスのインスタンスが作成され、19 行目でクラスのインスタンス メソッドが呼び出されます。

上記のコードからわかるように、クラスの静的コンストラクターは明示的に呼び出されません。

以下の上記コードの実行結果をご覧ください:

静的構築メソッドが実際に実行されていることがわかります。上記の例は、クラスのインスタンスが作成されると、そのクラスの静的構築メソッドが自動的に呼び出される条件の 1 つです。

静的コンストラクターの呼び出し順序は、静的フィールドの初期化子の後です。

つまり、最初のステップは静的フィールドのデフォルト値を設定すること、第二ステップは静的フィールドの初期値設定項目を実行すること、そして第三ステップはクラスの静的コンストラクターメソッドを呼び出すことです。 静态字段 a 的值是:11

前のコード例を変更してみましょう。コードは次のとおりです。

using System;
namespace LycheeTest{
 class Test {
 private static int a;
 static Test() {
  a++;
 }
 public void Show() {
  Console.WriteLine("静态字段 a 的值是:{0}", a);
  14
 }
 }
 class Program {
 static void Main(string[] args) {
  Test t = new Test();
  t.Show();
  Test t1 = new Test();
  t.Show();
  Console.ReadKey();
 }
 }
}

このコードは、静的構築メソッドを変更し、メソッド本体の静的フィールド a をインクリメントします。次に、コードの 17 行目で、クラスの別のインスタンスが作成され、クラスのインスタンス メソッドが再度呼び出されます。

以下の実行結果を見てください:

静态字段 a 的值是:1 
静态字段 a 的值是:1

静的フィールドの値が増加していないことがわかります。これは静的コンストラクター実行の特徴であり、一度だけ実行されます。アセンブリが実行されると、アプリケーション ドメインが作成されます。アプリケーション ドメインでは、クラスの静的構築メソッドが 1 回だけ実行されます。

コード例は次のように変更されます:

using System;
namespace LycheeTest {
 class Test {
 public static int a;
 static Test() {
  Console.WriteLine("类的静态构造方法开始执行");
  a++;
 }
 public void Show() {
  Console.WriteLine("静态字段 a 的值是:{0}", a);
 }
 }
 class Program {
 static void Main(string[] args) {
  Console.WriteLine("静态字段 a 的值是:{0}", Test.a);
  Console.WriteLine("静态字段 a 的值是:{0}", Test.a);
  Console.ReadKey();
 }
 }
}

このコードは、クラスの静的構築メソッド内のタグの行を出力し、クラスの静的フィールドのアクセス権も public に変更され、これにより許可されます。クラス外からアクセスできます。静的フィールドの値は、Main メソッドで 2 回出力されます。クラスの外部でクラスの静的フィールドを呼び出すには、

reference

にクラス名を使用する必要があることに注意してください。

以下はコードの実行結果です:

类的静态构造方法开始执行
静态字段 a 的值是:1
静态字段 a 的值是:1

このコードはクラスのインスタンスを作成しません。クラスの静的メンバーを参照する前に、クラスの静的コンストラクターが呼び出されます。呼び出されるクラスの静的メンバーには、静的フィールドと静的メソッドが含まれます。これは、クラスの静的コンストラクター メソッドを呼び出すための 2 番目の条件です。

コード例は次のように変更されます:

using System;
namespace LycheeTest {
 class Program {
 private static int a;
 static Program() {
  Console.WriteLine("类的静态构造方法被调用");
  a = 11;
 }
 static void Main(string[] args) {
  Console.WriteLine("Main 方法被调用");
  Console.WriteLine("静态字段 a 的值是:{0}", a);
  Console.ReadKey();
 }
 }
}

このコードは、Main メソッドを含むクラスで静的フィールドと静的コンストラクターを定義します。 Main メソッドも静的メソッドであるため、クラスの静的コンストラクターが呼び出され、それがクラスのエントリ ポイント メソッドとなるため、Main メソッドとクラスの静的コンストラクターの間で、誰が最初にそれを呼び出すのでしょうか。まずコードの実行結果を見てみましょう:

类的静态构造方法被调用
Main 方法被调用
静态字段 a 的值是:11

コードの実行結果から、クラスのエントリ ポイント メソッドが依然として静的メソッドであるため、静的コンストラクター メソッドが静的メンバーの前に最初に呼び出されることがわかります。と呼ばれます。したがって、クラスの静的コンストラクターは、クラスの Main メソッドの前に呼び出されると結論付けることができます。

では、クラスの静的コンストラクターを明示的に呼び出すことはできるのでしょうか?以下のコード例を見てください:

using System;
namespace LycheeTest {
 class Program {
 private static int a;
 static Program() {
  Console.WriteLine("类的静态构造方法被调用");
  a = 11;
 }
 static void Main(string[] args) {
  Program();
  Console.ReadKey();
 }
 }
}

在这段代码中的第 10 行显式调用了类的静态构造方法,这时编译器会报错。

2.实例构造函数

类的实例构造方法是类的成员方法的一种,它的作用是对类的实例成员进行初始化操作。实例构造方法可以实现重载,在创建类的实例时,可以显式的指定不同的参数来调用重载的不同的实例构造方法。下面请看代码实例:

using System;
namespace LycheeTest {
 class Program {
 private static int a;
 private int b = 12;
 private string c = "Hello World";
 static Program() {
  Console.WriteLine("类的静态构造方法被调用");
  a = 11;
 }
 public Program(int a, string s) {
  Console.WriteLine("带二个参数的构造方法被调用");
  this.b = a;
  this.c = s;
 }
 public Program(int a) : this(a, "通过 this 关键字调用构造方法") {
  Console.WriteLine("带一个参数的构造方法被调用");
 }
 public void Show() {
  Console.WriteLine("静态字段 a 的值是:{0}", a);
  Console.WriteLine("实例字段 b 的值是:{0}", b);
  Console.WriteLine("实例字段 c 的值是:{0}", c);
 }
 static void Main(string[] args) {
  Program p1 = new Program(33, "这是创建的实例 P1");
  Program p2 = new Program(34);
  p1.Show();
  p2.Show();
  Console.ReadKey();
 }
 }

这段代码的第 4 行、第 5 行和第 6 行分别定义了三个字段成员,第 4 行是静态字段,第 5 行和第 6 行代码都有初始值设定项。代码的第 8 行就是一个实例构造方法的定义,实例构造方法也是以类名作为方法名,它没有返回值, 在方法名前面是访问权限修饰符,可以使用的访问权限修饰符包括 public、private 和 protected。其中的 protected 意味着构造方法只能在此类内部访问。实例构造方法可以带参数。 第 12 行代码的实例构造方法使用两个传入的参数对实例字段进行了赋值。第 17 行代码定义了带一个参数的实例构造方法,它和前一个实例构造方法形成了重载。实例构造方法可以通过 this 关键字调用其他的实例构造方法,方法就是在参数列表的后面使用冒号然后接 this 关键字, 然后再跟参数列表,这个参数列表要匹配另一个重载的实例构造方法。第 17 行的构造方法只有一个参数, 它将这个参数通过 this 关键字传递给了另一个构造方法,在用 this 调用另一个构造方法的时候,为其同时传入了一个字符串参数。第 24 行的实例方法打印类的字段成员的值。在 Main 方法中,第 26 行代码和第 27 行代码分别定义了两个实例,它们使用 new 关键字调用了不同的实例构造方法。第 28 行和第 29 行分别调用实例方法打印类的静态字段和实例的两个字段成员的值。

下面先来看代码的执行结果:

类的静态构造方法被调用 带二个参数的构造方法被调用 带二个参数的构造方法被调用 带一个参数的构造方法被调用 
静态字段 a 的值是:11 
实例字段 b 的值是:33
实例字段 c 的值是:这是创建的实例 P1 静态字段 a 的值是:11
实例字段 b 的值是:34
实例字段 c 的值是:通过 this 关键字调用构造方法

现在用执行结果来介绍实例构造方法的执行过程,当第 26 行代码创建类的实例时,类的静态字段首先被设置成默认值,因为没有字段的初始值设定项,所以接着就执行类的静态构造方法。这时静态字段 a 被 设置成 11。因为第 26 行代码使用 new 调用了带有两个参数的实例构造方法,所以首先实例字段 b 被设置为 0,实例字段 c 被设置为 null。然后执行字段的初始值设定项,b 被赋值为 12,c 被赋值为“Hello World”。接 下来执行实例构造方法体中的第一个语句,“带二个参数的构造方法被调用”这个字符串被打印。接下来 实例 p1 的字段 b 被设置为传入的参数 33,注意构造方法的形参 a 在这里覆盖了类的静态字段 a。也就是说, 这时起作用的是实例构造方法的局部变量 a。然后实例字段 c 被设置为字符串"这是创建的实例 P1"。第 27 行代码使用 new 关键字调用了带一个参数的实例构造方法,在调用时,首先属于 p2 的实例字段 b 被设置为 0,实例字段 c 被设置为 null。然后执行字段的初始值设定项,b 被赋值为 12,c 被赋值为“Hello World”。接下来执行的是 this 引用的带两个参数的实例构造方法,"带二个参数的构造方法被调用"这个 字符串被打印。然后 b 被设置为 34,c 被设置为"通过 this 关键字调用构造方法"。最后,代码控制又返回 来执行带一个参数的实例构造方法体中的打印语句,"带一个参数的构造方法被调用"这个字符串被打印。 至此,实例构造方法的执行完毕。接下来的代码打印静态字段的值,可以看到两个实例打印出来的静态字段值是一样的,但是它们的实 例字段的值各不相同。

可选参数和命名参数也可以用于实例构造方法,下面看代码实例:

using System;
namespace LycheeTest {
 class Program {
 private int b;
 private string c;
 public Program(int a = 12, string s = "") {
  this.b = a;
  this.c = s;
 }
 public void Show() {
  Console.WriteLine("实例字段 b 的值是:{0}", b);
  Console.WriteLine("实例字段 c 的值是:{0}", c);
 }
 static void Main(string[] args) {
  Program p1 = new Program(); //构造方法的两个参数都采用默认值
  Program p2 = new Program(34); //构造方法的 string 类型参数采用默认值
  Program p3 = new Program(23, "Hello World"); //构造方法的两个参数采用传入参数
  Program p4 = new Program(s: "今天的天气真好"); //采用命名参数,另一个参数 a 采用默认值
  p1.Show();
  p2.Show();
  p3.Show();
  p4.Show();
  Console.ReadKey();
 }
 }
}

代码的第 6 行定义了一个带有可选参数和命名参数的构造方法,然后第 15 创建了一个类的实例,在构造方法中没有传入任何参数,这时,构造方法的两个参数都采用默认值。第 16 行代码为构造方法传入了一个 int 类型的参数,这时,另一个 string 类型的参数采用默认值。 第 17 行代码传入了两个参数,构造方法的两个参数都使用了这两个传入的参数。第 18 行代码使用了命名参数指定传入的参数是 string 类型的参数,并将它传递给形参 s。这时另一 个 int 类型的参数采用默认值。第 19 行到第 23 行代码打印类的实例字段的值。这段代码的执行结果如下:

实例字段 b 的值是:12 
实例字段 c 的值是: 
实例字段 b 的值是:34 
实例字段 c 的值是: 
实例字段 b 的值是:23
实例字段 c 的值是:Hello World 实例字段 b 的值是:12
实例字段 c 的值是:今天的天气真好

以上がC#クラスの構築方法とサンプルコードを詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
C#.NET開発今日:トレンドとベストプラクティスC#.NET開発今日:トレンドとベストプラクティスApr 28, 2025 am 12:25 AM

C#.NET開発における最新の開発とベストプラクティスには、次のものが含まれます。1。非同期プログラミングは、アプリケーションの応答性を向上させ、Asyncを使用して非ブロッキングコードを簡素化し、キーワードを待ちます。 2。LINQは強力なクエリ関数を提供し、遅延した実行および式ツリーを介してデータを効率的に操作します。 3.パフォーマンスの最適化の提案には、非同期プログラミングの使用、LINQクエリの最適化、メモリの合理的な管理、コードの読みやすさとメンテナンスの改善、単体テストの書き込みが含まれます。

C#.NET:.NETエコシステムを使用したアプリケーションの構築C#.NET:.NETエコシステムを使用したアプリケーションの構築Apr 27, 2025 am 12:12 AM

.NETを使用してアプリケーションを構築する方法は? .NETを使用してアプリケーションを構築することは、次の手順を通じて達成できます。1)C#言語やクロスプラットフォーム開発サポートを含む.NETの基本を理解します。 2)コンポーネントや.NETエコシステムの作業原則などのコア概念を学習します。 3)単純なコンソールアプリケーションから複雑なWebAPISおよびデータベース操作まで、基本的および高度な使用をマスターします。 4)構成やデータベース接続の問題など、一般的なエラーとデバッグ手法に精通している。 5)アプリケーションのパフォーマンスの最適化と非同期プログラミングやキャッシュなどのベストプラクティス。

汎用性のある.NET言語としてのC#:アプリケーションと例汎用性のある.NET言語としてのC#:アプリケーションと例Apr 26, 2025 am 12:26 AM

C#は、エンタープライズレベルのアプリケーション、ゲーム開発、モバイルアプリケーション、Web開発で広く使用されています。 1)エンタープライズレベルのアプリケーションでは、C#がasp.netcoreにWebAPIを開発するためによく使用されます。 2)ゲーム開発では、C#がUnityエンジンと組み合わされて、ロールコントロールやその他の機能を実現します。 3)C#は、コードの柔軟性とアプリケーションのパフォーマンスを改善するために、多型と非同期プログラミングをサポートします。

Web、デスクトップ、モバイル開発用のC#.NETWeb、デスクトップ、モバイル開発用のC#.NETApr 25, 2025 am 12:01 AM

C#と.NETは、Web、デスクトップ、モバイル開発に適しています。 1)Web開発では、ASP.Netcoreがクロスプラットフォーム開発をサポートしています。 2)デスクトップ開発では、さまざまなニーズに適したWPFとWINFORMSを使用します。 3)モバイル開発は、Xamarinを介したクロスプラットフォームアプリケーションを実現します。

C#.NETエコシステム:フレームワーク、ライブラリ、およびツールC#.NETエコシステム:フレームワーク、ライブラリ、およびツールApr 24, 2025 am 12:02 AM

C#.NETエコシステムは、開発者がアプリケーションを効率的に構築できるようにするための豊富なフレームワークとライブラリを提供します。 1.ASP.NETCOREは、高性能Webアプリケーションの構築に使用されます。2.EntityFrameWorkCoreは、データベース操作に使用されます。これらのツールの使用とベストプラクティスを理解することにより、開発者はアプリケーションの品質とパフォーマンスを向上させることができます。

azure/awsへのc#.netアプリケーションの展開:ステップバイステップガイドazure/awsへのc#.netアプリケーションの展開:ステップバイステップガイドApr 23, 2025 am 12:06 AM

c#.netアプリをAzureまたはAWSに展開する方法は?答えは、AzureAppServiceとAwselasticBeanStalkを使用することです。 1。Azureでは、AzureAppServiceとAzurePipelinesを使用して展開を自動化します。 2。AWSでは、Amazon ElasticBeanstalkとAwslambdaを使用して、展開とサーバーレス計算を実装します。

C#.NET:強力なプログラミング言語の紹介C#.NET:強力なプログラミング言語の紹介Apr 22, 2025 am 12:04 AM

C#と.NETの組み合わせにより、開発者に強力なプログラミング環境を提供します。 1)C#は、多型と非同期プログラミングをサポートします。2).NETは、クロスプラットフォーム機能と同時処理メカニズムを提供し、デスクトップ、Web、モバイルアプリケーション開発で広く使用されています。

.NETフレームワーク対C#:用語のデコード.NETフレームワーク対C#:用語のデコードApr 21, 2025 am 12:05 AM

.NetFrameworkはソフトウェアフレームワークであり、C#はプログラミング言語です。 1..netframeworkは、デスクトップ、Web、モバイルアプリケーションの開発をサポートするライブラリとサービスを提供します。 2.C#は.NetFrameWork用に設計されており、最新のプログラミング機能をサポートしています。 3..NetFrameworkはCLRを介してコード実行を管理し、C#コードはILにコンパイルされ、CLRによって実行されます。 4. .NetFrameWorkを使用してアプリケーションをすばやく開発し、C#はLINQなどの高度な関数を提供します。 5.一般的なエラーには、タイプ変換と非同期プログラミングデッドロックが含まれます。 VisualStudioツールは、デバッグに必要です。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。