C#基礎学習(1)

1. C#言語の概念とその特徴

1) コンセプト

C# 是微软发布的一种面向对象的、运行于 .NET Framework 和 .NET Core(完全开源,跨平台) 之上的高级程序设计语言;
C# は、C および C++ から派生した、安全で安定したシンプルかつエレガントなオブジェクト指向プログラミング言語です。它在继承C和C++强大功能的同时去掉了一些它们的复杂特性;

2) オブジェクト指向プログラミング言語とプロセス指向プログラミング言語の違い:

面向过程: は 1 つです以过程为中心的编程思想一种基础的顺序思维方式,是以什么正在发生为主要目标进行编程影響を受けるのはオブジェクト指向とは異なります;: (
特性: 模块化、流程化;
常见的 面向过程编程语言有利点 C语言、COBOL 语言、Fortran语言 等。: パフォーマンスがオブジェクト指向よりも高く、オブジェクト指向クラス呼び出しはインスタンス化してリソースを消費する必要があります)

面向对象:ユニークです对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物すべてのものを独立したオブジェクトとして直接扱います。問題に対処する過程で、主に考慮されるのは、データ構造を使用して問題を記述する方法ではなく、問題内のさまざまなオブジェクト間の関係を直接考慮することです。(オブジェクト指向手法の基本的な実装には、プロセス指向の考え方も含まれています); ; :
特性: 抽象封装继承多态(
常见的支持面向对象的编程语言有利点C++ 语言、C# 语言、Java 语言、Python等。: カプセル化、継承、ポリモーフィズムの特性があるため、保守、再利用、拡張が容易です)

3) .NET Framework と .NET Core を理解する

NET と C# の関係:

.NET是平台;
C# はプラットフォームに適用できるオブジェクトですC# 只能运行在.NET 平台が、.NET プラットフォームは C++、VB などの他のオブジェクトにも適用できます。

NET Framework と .NET Core:

.Net Framework歴史は.Net Core もっと長いです。.Net Framework の最初のバージョンは2002 年頃にリリースされ、.Net Core の最初のバージョンは 2016 年頃にリリースされ、14 年近くの違いがあります
.Net Framework只针对Windows平台,包含了Windows平台的所有特性.Net Core 可以针对多个平台发布,但是.Net Core 无法包含.Net Framework的所有特性。Net Core的跨平台特性可以方便的在多个平台上共享业务逻辑。

4) C#の強力なプログラミング機能

C#的构想十分接近于传统的高级语言C和C++これは専門分野です面向对象的编程语言它与JAVA非常相似,有很大强大的编程功能大多数のプログラマーに好まれています。
C# の重要な機能のいくつかを以下に示します。

  • ブール条件 (ブール条件)
  • 自動ガベージコレクション
  • 標準ライブラリ
  • アセンブリのバージョン管理
  • プロパティとイベント
  • 参加者とイベントの管理
  • 使いやすさを追求したジェネリック
  • インデクサー
  • 条件付きコンパイル
  • 簡易マルチスレッド(マルチスレッド)
  • LINQ とラムダ式の統合ウィンドウ

5) C# 統合開発環境 (統合開発環境 - IDE)

Microsoft は、次のものを提供していますC#编程的工具

  • Visual Studio 2022(VS)
  • Visual C# 2022 Express(VCE)
  • ビジュアルウェブ開発者

後者の 2 つは無料で使用でき、Microsoft の公式 Web サイトからダウンロードできます。Visual C# 2022 Express および Visual Web Developer エディションは、同じルック アンド フィールを備えた Visual Studio のカスタマイズされたバージョンです。これらは、Visual Studio のほとんどの機能を保持します。

6) Linux または Mac OS で C# プログラムを作成する

.NET 框架Windows 上で動作しますWindows操作系统上、他のオペレーティング システム上で動作するバージョンもあります。Mono 是.NET框架的一个开源版本,它包含了一个C#编译器, 且可运行于多种操作系统上、Linux や Mac OS のさまざまなバージョンなど。詳細については、Go Mono をご覧ください。
Mono の目的は、Microsoft の .NET アプリケーションをさまざまなプラットフォームで実行することだけでなく、Linux 開発者により優れた開発ツールを提供することでもあります。Mono 可运行在多种操作系统上, 包括Android 、BSD 、iOS、Linux、 OS X、 Windows、 Solaris 和UNIX。

2.C#プログラムの構造

C# の Hello World の例

C# プログラムは主に次の部分で構成されます。

  • 名前空間(名前空間宣言) ·
  • クラス クラスのメソッド
  • クラス属性
  • メインメソッド
  • ステートメント (Statement) と Expression (式)
  • C# に注釈を付ける
  • ファイルの拡張子は **.cs** です。

以下は、「hello world」を出力する単純なコードを含む test.cs ファイルを作成します。

using System;
namespace HelloWorldApplication
{
    
    
    class HelloWorld
    {
    
    
        static void Main(sting[] args)
        {
    
    
            /*我的第一个C#程序*/
            Console.WriteLine("hello world");
            Console.ReadKey();
        }
    }
}

ここに画像の説明を挿入

上記のコードをコンパイルして実行すると、結果は次のようになります。

ここに画像の説明を挿入

上記のプログラムのさまざまな部分を見てみましょう。

  • プログラムの最初の行using System; using关键字用于在程序中包含System的命名空间一个程序可以有多个using、複数のコマンド スペースが含まれます (言語の #include<stido.h> に似ています)。
  • 次の行はnamespaceステートメントです。名前空間には一連のクラスが含まれます。HelloWorldApplication名前空間には が含まれます类HelloWorld
  • 次の行はクラス宣言です。
    类HelloWorldプログラムで使用されるものが含まれます数据和方法声明类一般包含多个方法,方法定义了类的行为。ここでは HelloWorld クラスを示します只有一个方法Main
  • 次の行ではMain方法、 、を定義します是所有C#程序的入口点Main メソッドは、実行時にクラスが実行するアクションを指定します。
  • 次の行 /…/ はコメントであり、コンパイラによって無視されます。
  • Main メソッドは、ステートメントConsole.WriteLine("hello world");を通じてその動作を指定します。
    WriteLineはい、一个定义在System命名空间中的Console类的一个方法。このステートメントにより、画面に「hello World」というメッセージが表示されます。
  • 最後の行はユーザーConsole.ReadKey(); 用です。VS.NETこれにより、プログラムはキーが押されるまで待機します。防止程序从Visual Studio .NET启动时屏幕会快速运行并关闭。

次の点に注意が必要です。

  • C# では大文字と小文字が区別されます
  • すべてのステートメントと式はセミコロン (;) で終わる必要があります。
  • プログラムは Main メソッドから始まります
  • Java とは異なり、ファイル名はクラス名と異なっていてもかまいません

C# プログラムのコンパイルと実行

如果您使用Visual Studio .NET编译和执行C#程序,请按照下面的步骤操作

  • Visual Studioを起動します メニューバーで「ファイル」→「新規作成」→「プロジェクト」を選択します
    テンプレートから「Visual C#」を選択し、
  • 次に、「Windows」を選択します。 「コンソール アプリケーション」を選択します。 プロジェクトに名前を付けます。
  • [OK] ボタンをクリックすると、新しいプロジェクトがソリューション エクスプローラー (ソリューション エクスプローラー) に表示されます。
  • コードエディタでコードを書く
  • 「実行」ボタンをクリックするか、F5 キーを押してプログラムを実行します。
  • コマンド プロンプト ウィンドウ (コマンド プロモーション ウィンドウ) が表示され、「hello World」と表示されます。

您也可以使用命令行代替Visual Studio IDE来编译C#程序:

  • テキストエディタを開いて上記のコードを追加します
  • ファイルを HelloWorld.cs として保存します。
  • コマンド プロンプト ツールを開き、ファイルが保存されているディレクトリに移動します。
  • 「csc helloworld.cs」と入力し、Enter キーを押してコードをコンパイルします。
  • コードにエラーがない場合、コマンド ライン プロンプトは次の行に進み、HelloWorld.ext 実行可能ファイルを生成します。
  • 次に、「helloworld」と入力してプログラムを実行します
  • 画面に「hello World」と表示されます

3. C#の基本構文

Rectangle (長方形) オブジェクトを例にとると、長さと幅の属性があり、それに応じて面積を計算できます。Rectangle クラスの実装を使用して C# の基本構文を説明しましょう。

using System;
namespace RectangleApplication
{
    
    
    class Rectangle
    {
    
    
        //成员变量
        double length;
        double width;
        public void Acceptdetails()
        {
    
    
            length = 4;
            width = 3;
        }
        public double GetArea()
        {
    
    
            return length * width;
        }
        public void Display()
        {
    
    
            Console.WriteLine("length:{0}", length);
            Console.WriteLine("width:{0}", width);
            Console.WriteLine("Area:[0}", GetArea());
        }
    }
   class ExecuteRectangle
    {
    
    
        static void Main(string[] args)
        {
    
    
            Reatangle r = new Rectangle();
            r.Acceptdetails();
            r.Display();
            Console.ReadLine();
        }
    }
}

上記のコードをコンパイルして実行すると、次の結果が生成されます。

length: 4
width: 3
Area: 12

キーワードを使用して

C# プログラムの最初のステートメントは次のとおりです。

using System;
// using System;
 
namespace ConsoleApp1
{
    
    
    class Program
    {
    
    
        static void Main(string[] args)
        {
    
    
            System.String a = "Hello World!";
            System.Console.WriteLine(a);
            System.Console.ReadKey();
        }
    }
}
using System;
 
namespace ConsoleApp1
{
    
    
    class Program
    {
    
    
        static void Main(string[] args)
        {
    
    
            string a = "Hello World!";
            Console.WriteLine(a);
            Console.ReadKey();
        }
    }
}

は同等です。
using キーワードは、プログラムに名前空間を含めるために使用されます。一个程序可以包含多个 using 语句

クラスキーワード

class キーワードはクラスを宣言するために使用されます

C# でのコメント

コメントはコードを説明するために使用されます。コンパイラはコメントされたエントリを無視します。C# プログラムでは、以下に示すように、複数行コメントに /* XXXXX */ を使用します。

/*This program demonstrates 
The basic sysntax of C# programming
Language */

単一行のコメントは「//」記号で表されます。例えば:

メンバー変数

变量是类的属性または数据成员、 の場合存储数据上記のプログラムでは、Rectangle クラスに length と width という名前の 2 つのメンバー変数があります。

メンバー関数

関数は、指定されたタスクを実行する一連のステートメントです。类的成员函数是在类内声明的この例のクラス Rectangle にはAcceptDetailsGetAreaと の3 つのメンバー関数が含まれていますDisplay

クラスをインスタンス化する
上記のプログラムでは、类ExecuteRectangleはい です一个包含Main() 方法和实例化Rectangle类的类

識別子

标识符クラス、変数、関数、またはその他のユーザー定義項目を識別するために使用されます。C# では、クラスの名前付けは次の基本ルールに従う必要があります。

  • 标识符必须以字母、下划线或 @ 开头,后面可以跟一系列的字母、数字(0-9)、下划线(_)、@
  • 識別番号一个字符不能是数字
  • 識別子は次のとおりです。不包含任何嵌入的空格或符号,比如?-+!%……&*()[ ] { } . ; :" ’ / \
  • 标识符不能是C#的关键字@ プレフィックスがない限り。たとえば、@if は有効な識別子ですが、if はキーワードであるため、有効ではありません。
  • 标识符必须区分大小写大文字と小文字は別の文字とみなされます
  • 不能与C#的类库名称相同

C# キーワード

关键字はいC#编译器预定义的保留字これらのキーワードは識別子として使用できませんが、如果想使用这些关键字作为标识符,可以在关键字前面加上@字符作为前缀
C# では一部のキーワードがコードのコンテキストで特別な意味を持ちます。たとえばget和set,这些被称为上下文关键字次の表に、C# の予約済みキーワードとコンテキスト キーワードを示します。

保留关键字
ベースとして抽象 bool ブレーク バイトケース
キャッチ char チェックされたクラス const 継続 10 進数
デフォルト デリゲート do double else enum イベント
明示的 extern false 最終的に foreach の float を修正
goto if implict in in(generic modifier) int
インターフェイス 内部は lock long 名前空間 新しい
null オブジェクト演算子 out out(汎用修飾子) オーバーライド params
private protected public readonly ref return sbyte
sealed short sizeof stackalloc static string struct
switch this throw true try typeof uint
ulong unchecked unsafe ushort using virtual void
volatile 同時に、グローバル グループ
上下文关键字
から動的エイリアス昇順降順を結合
に追加 let orderby
部分的(メソッド) 選択セットを削除します

C# のデータ型

C# では、変数は次の型に分類されます。

  • 値の種類
  • 参照型
  • ポインタの種類
  • 値の種類
  • 値型変数は値に直接割り当てることができ、System.ValueTypeクラスから派生します。
    值类型直接包含数据int、char、float など、別々に保存されます数字,字符、浮点数int 型を宣言すると、システムは値を格納するためにメモリ クラスを割り当てます。
    次の表に、C#2010 で使用できる値の型を示します。
    ここに画像の説明を挿入
    特定のプラットフォームで型または変数の正確なサイズを取得するには、sizeof メソッドを使用します。式 sizeof(type) は、格納されたオブジェクトまたは型のストレージ サイズをバイト単位で返します。次の例では、任意のマシン上の int 型のストレージ サイズを取得します。
using System;
namespace DataTypeApplication
{
    
    
    class Program
    {
    
    
        static void Main(string[] args)
        {
    
    
            Console.WriteLine("Size of int:{0}", sizeof(int));
            Console.ReadLine();
        }
    }    
}
Size of int: 4

参照型

参照型には、変数に格納される実際のデータは含まれませんが、変数への参照が含まれます。
参照型はメモリ位置を参照します。複数の変数を使用する場合、参照型はメモリ位置を指すことができます。メモリ位置のデータが 1 つの変数によって変更されると、他の変数の値の変更が自動的に反映されます。組み込みの参照タイプは、オブジェクト、動的、文字列です。

オブジェクト(オブジェクト)タイプ

オブジェクト型は、C# Common Type System (CTS) のすべてのデータ型の最終的な基本クラスです。
Object は、System.Object クラスのエイリアスです。したがって、オブジェクト (オブジェクト) 型には、他の型 (値型、参照型、事前定義型、およびユーザー定義型) の値を割り当てることができます。ただし、代入の前に型変換が必要です。
値型をオブジェクト型に変換することをボックス化と呼び、オブジェクト型を値型に変換することをアンボックス化と呼びます。

object obj;
obj = 100; //これはビニング
1
2

ダイナミック型

動的データ型変数には任意の型の値を格納でき、これらの変数の型は実行時にチェックされます。
動的データ型を宣言するための構文:

動的 <変数名> = 値;
1
例:

dynamic d = 20;
1
動的型はオブジェクト型と似ていますが、オブジェクト型変数のチェックはコンパイル時に行われ、動的型変数のチェックは実行時に行われます。

文字列(String)型

文字列 (String) 型を使用すると、変数に任意の文字列値を割り当てることができます。String (String) 型は、System.String クラスのエイリアスです。これは、オブジェクト (Object) 型から派生します。String 型の値は、引用符と @quotes の 2 つの形式で割り当てることができます。
例えば:

String str = "hello world";
1
@quoted 文字列:

@"hello world"
1
C#string の前に @ (「逐語的文字列」と呼ばれます) を付けて、エスケープ文字 (\) を通常の文字として扱うことができます。次に例を示します。

sting str = @“C:\Windows”;
は次と同等です:
string str = “C:\Windows”;
1
2
3
@文字列は任意に折り返すことができ、改行とインデント スペースは文字列の長さに含まれます。

string str = @"<script type=""text/javascript"">

";
1
2
3 4
ユーザー
定義の参照型には、クラス、インターフェイス、またはデリゲートが含まれます。

ポインタの種類

ポインタ型の変数には、別の種類のメモリ アドレスが格納されます。C# のポインターには、C または C++ のポインターと同じ機能があります。
ポインター型の構文:

タイプ*識別子

例:
char* cptr;
int* iptr;
1
2
3
4
5

型変換

型変換は、ある型から別の型へのデータの変換です。C# では、型変換には 2 つの形式があります。

暗黙的な型変換: この変換は、データ損失を引き起こすことなく安全な方法で行われる C# の既定の変換です。たとえば、小さい整数型から大きい整数型への変換、派生クラスから基本クラスへの変換などです。
表示型変換: つまり、必須の型変換です。表示変換にはキャスト演算子が必要ですが、キャストによりデータ損失が発生します。
次の例は、明示的な型変換を示しています。

using System;
namespace ExplicitConversion
{ static void Main(string[] args) { double d = 512.6; int a; // double を int にキャストa = (int)d; Console.WriteLine("a = {0}", a ); Console.ReadKey(); } } 1 2 3 4 5 6 7 8 9 10 11 12 13上記のコードをコンパイルして実行すると、結果は次のようになります。























5673
1
C# の型変換メソッド
C# には、次の組み込みの型変換メソッドが用意されています。

順序メソッドと説明
1 ToBoolean 可能であれば、型を Boolean 型に変換します。
2 ToByte 型をバイト型に変換します。
3 ToChar 可能であれば、型を Unicode 文字型に変換します。 4
ToDateTime 型を変換します (整数型または文字列型) For日時構造体
5 ToDecimal 浮動小数点型または整数型を 10
進数型に変換します 6 ToDouble 型を倍数累進浮動小数点型に変換します
7 ToInt16 型を 16 ビット整数型に変換します
8 ToInt32 型を変換します32 ビット整数型に
変換する 9 ToInt64 型を 64 ビット整数型に変換
する 10 ToSbyte 型を符号付きバイト型に変換する
11 ToSingle 型を小さい浮動小数点型に変換する
12 ToString 型を文字列型に変換する
13 ToType 型を指定された型に変換します
14 ToUInt16 型を変換します 16 ビット符号なし整数型に変換
します 15 ToUInt32 型を 32 ビット符号なし整数
型に変換します 16 ToUInt64 型を 64 ビット符号なし整数型に変換します
次の例は、文字列型に異なる値の型:

システムを使用する;
namespace TypeConversionApplication
{ class StringConversion { static void Main(string[] args) { int i = 80; 浮動小数点数 f = 51.006f; 二重 d = 123.2563; ブール b = true; Console.WriteLine(i.ToString()); Console.WriteLine(f.ToString()); Console.WriteLine(d.ToString()); Console.WriteLine(b.ToString()); } } }














上記のコードをコンパイルして実行すると、結果は次のようになります。

80
51.006
123.2563

C# 変数
変数は、プログラム操作のために保存された名前にすぎません。C# では、各変数には特定の型があり、これによって変数のメモリ サイズとレイアウトが決まります。範囲内の値をメモリに保存し、変数に対して一連の操作を実行できます。
C# の基本的な種類は、次のカテゴリに大別できます。

型の例
整数型 sbyte、byte、short、ushort、int、uint、long、ulong、char
浮動小数点型 float および double
小数型 decimal ブール
型 true または false
Null 型 Nullable データ型
ユーザーからの値を受け入れる
システム名前空間の Console クラスは、ユーザーからの入力を受け取り、それを変数に格納するための関数 ReadLine() を提供します。
例えば:

int num;
num = Convert.ToInt32(Console.ReadLine());
1
2
関数 Convert.ToInt32() は、ユーザーが入力したデータを int データ型に変換します。Console.ReadLine() は文字列形式のデータのみを受け入れるためです。

C# 演算子

演算子は、コンパイラに特定の数学的演算または論理演算を実行するように指示する記号です。C# の組み込み演算子は次のように分類されます。

算術演算子
関係演算子
論理演算子
ビット演算子
代入演算子
その他の演算子

算術演算子

次の表は、C# でサポートされているすべての算術演算子を示しています。変数 A の値が 10、変数 B の値が 20 であると仮定すると、次のようになります。

演算子の説明例

  • 2 つの数値を加算 A + B = 30
  • 最初のオペランドから 2 番目のオペランド A - B = -10 を減算します。
  • 2 つの数値の乗算 A* B = 200
    / 2 つの数値の除算 B / A = 2
    % モジュロ演算子、除算後の剰余 B % A = 0
    ++ 自動インクリメント演算子、整数値を 1 ずつインクリメント A++ Get 11
    – デクリメント演算子、整数値は 1 ずつ減らされます A – get 9
    以下は、インクリメント (++) 演算子とデクリメント演算子の詳細な説明です。

c = a++: まず a を c に代入し、次に a に対して自動インクリメント演算を実行します。
c = ++a: まず a に対して自己インクリメント演算を実行し、次に a を c に代入します。
c = a–: まず a を c に代入し、次に a に対して自己減分演算を実行します。
c = --a: まず a に対して自己減分演算を実行し、次に a を c に割り当てます。
上記の操作を次の例で説明します。

using System;
namespace OperatorsApplication
{ class Program { static void Main(string[] args) { int a = 1; int b; //a++ 最初に値を割り当て、次に自己インクリメントを実行しますb = a++; Console.WriteLine("a = {0 }", a); Console.WriteLine("b = {0}", b); Console.ReadLine();










        //++a 先进行自增减运算再赋值
        a = 1;//重新进行初始化
        b = ++a;
        Console.WriteLine("a = {0}", a);
        Console.WriteLine("b = {0}", b);
        Console.ReadLine();
        
        //a-- 先进行赋值,再进行自减运算
        a = 1;  //重新进行初始化
        b = a--;
        Console.WriteLine("a = {0}", a);
        Console.WriteLine("b = {0}", b);
        Console.ReadLine();

        //--a 先进行自减运算,再赋值
        a = 1; // 重新进行初始化
        b = --a;
        Console.WriteLine("a = {0}", a);
        Console.WriteLine("b = {0}", b);
        Console.ReadLine();        
        
    }
}

}

上記のプログラムを実行すると、出力は次のようになります。

a = 2
b = 1
a
= 2
b =
2
a = 0 b = 1 a = 0
b = 0

関係演算子

C# でサポートされているすべての演算子を以下に示します。変数 A が 10 で、変数の値が 20 だとすると、次のようになります。

演算子 説明 例
== 2 つのオペランドが等しいかどうかを確認し、等しい場合は条件が true (A == B) は true ではありません
!= 2 つのオペランドが等しいかどうかを確認し、等しくない場合は条件が成立しますは true (A ! = B) は true

左オペランドが右オペランドより大きいかどうかを確認し、はいの場合は条件が真 (A > B) は真ではありません
< 左オペランドが右オペランドより小さいかどうかを確認し、はいの場合は条件が真 (A < B) が真
= チェック左のオペランドは右のオペランド以上かどうか。Yes の場合、条件は true (A >= B) not true < =
左のオペランドが右のオペランド以下であるかどうかを確認し、Yes の場合は条件true (A <= B) は true

論理演算子

次の表は、C# でサポートされているすべての演算子の一覧です。変数 A がブール値 True、変数 B がブール値 false であると仮定すると、次のようになります。

演算子 説明 例
&& は論理 AND 演算子と呼ばれ、両方のオペランドがゼロ以外の場合、条件は true (A && B) が false になります
|| は論理 OR 演算子と呼ばれ、2 つのオペランドのいずれかがゼロ以外の場合、条件はis true (A
! は論理 NOT 演算子と呼ばれ、オペランドの論理状態を反転するために使用されます。条件が true の場合、論理 NOT 演算子はそれを false にします! (A && B) is true

ビット演算子

ビット演算子はビットを操作し、ビットごとに演算を実行します。& (ビット論理和)、| (ビット論理和)、および ^ (排他的論理和) の真理表は次のとおりです。

pq p&q p|qp^q
0 0 0 0 0 0 1
0 1 1 1
1 1 1 0
1 0 0 1 1
A=60、B = 13 をバイナリ形式で表すと、次のようになるとします
。 = 0011 1100
B = 0000 1101
A & B = 0000 1100
A | B = 0011 1101
A ^ B = 0011 0001
~A = 1100 0011 (各ビットを反転)
A >> 2 = 15 (つまり A / 22) A 2 シフト右にビット
A << 2 = 240 (つまり、A * 22) A は左に 2 ビットシフトします

代入演算子

次の表は、C# でサポートされている代入演算子の一覧です。

演算子 説明 例
= 単純な代入演算子、右オペランドの値を左オペランドに代入します C = A + B は A + B の値を C に代入します += 加算と代入演算子、右オペランドの値を加算します
結果左上のオペランドの が左オペランド C += A に割り当てられます。これは C = C + A -
= 減算および代入演算子と同等であり、左オペランドから右オペランドを減算した結果が左オペランドに割り当てられます。 C -= A C = C - A *= 乗算および代入演算子と同等で
、右オペランドと左オペランドを乗算した結果を左オペランドに代入します。C *= A は C = C * A と同等です。 /= 除算と代入演算子
、左オペランドを右オペランドで除算した結果を左オペランド C /= A に代入します。これは C = C / A と同等です。 %= モジュロと代入演算子を求め、次の係数を求めます
。 2 つのオペランドを入力し、左のオペランドに値を割り当てます。 C % = A は、C = C % A
<<= 左シフトおよび代入演算子 C <<= 2 は、C = C << 2 と同等です。

= 右シフトおよび代入演算子 C >>= 2 は、C = C >> 2
&= ビット単位の and and 代入演算子 C &= 2 は、C = C & 2
^= ビット単位の排他的論理和および代入演算子 C ^= と同等です。 2 は、C = C ^ 2
|= ビットごとの論理和および代入演算子 Cと同等です。

他の演算子

次の表は、sizeof、typeof、?: など、C# でサポートされているその他の重要な演算子を示しています。

演算子の説明 インスタンス
sizeof() はデータ型 sizeof(int) のサイズを返し、4 を返します
typeof() はクラス typeof(StreamReader) の型を返します
& 変数のアドレスを返します &a; 変数の実際のアドレスを取得します

  • 変数ポインタ *a; は変数を指します。
    ?: 条件式 条件が true の場合? then X : それ以外の場合、Y は
    オブジェクトが特定の型であるかどうかを判断します。If( Ford is Car) // Ford がクラス Car のオブジェクトかどうかを確認します。
    必須変換の場合、変換が失敗した場合でも例外はスローされません。Object obj = new StringReader("Hello"); StringReader r = obj as StringReader;

C# における演算子の優先順位

次の表では、演算子を演算子の優先順位の降順にリストしています。優先順位の高い演算子は表の上に表示され、優先順位の低い演算子は表の下に表示されます。式では、優先順位の高い演算子が最初に評価されます。

クラス演算子結合性
Suffix() [] -> . ++ – 左から右の
単項 + - ! ~ ++ – (type)* & sizeof 右から左への
乗算と除算* / % 左から右への
加算と減算 + - 左から右への
シフト << >> 左から右への
関係 < <= > >= 左から右へ右へ
等しい== != 左から右の
ビット単位 AND AND & 左から右の
ビット単位 XOR ^ 左から右の
ビット単位 OR | 左から右の
論理 AND AND && 左から右の
論理 OR || 左から右から右の
条件?: 右から左の
カンマ、左から右へ

C#判定

ほとんどのプログラミング言語における典型的な述語構造の一般的な形式は次のとおりです。

判定ステートメント
C# では、次の種類の判定ステートメントが提供されます。

if ステートメント

if ステートメントは、ブール式とそれに続く 1 つ以上のステートメントで構成されます。

if の構文:

if (boolean_expression)
{
    
    
    /* 如果布尔表达式为真,则执行该语句*/

ブール式が true の場合、if ステートメント内のコード ブロックが実行されます。ブール式が false の場合、if ステートメントの終了後 (閉じ括弧の後) の最初のコード セットが実行されます。

using System

namespace ConditionChoose
{
    
    
 
 class Program
 {
    
    
     static void Main(string[] args)
     {
    
    
         /*局部变量的定义*/
         int a = 20;
         /*使用if语句检查布尔条件*/
         if (a > 10)
         {
    
    
             Console.WriteLine("a 大于 10");
         }
         Console.WriteLine("a 的值是{0}", a);
         Console.ReadLine();
     }
 }
}

上記のコードをコンパイルして実行すると、結果は次のようになります。

a 大于 10
a 的值是20

if...else ステートメント

if ステートメントの後には、ブール式が false の場合に実行されるオプションの else ステートメントを続けることができます。その構文は次のとおりです。

if(boolean_expression)
{
    
    
    /*如果表达式为真将执行的语句*/
}
else
{
    
    
    /*如果表达式为假将执行的语句*/
}

using System

namespace ConditonChoose
{
    
    
    class Program
    {
    
    
        static void Main(string[] args)
        {
    
    
               int a = 20;
                /*检查布尔条件*/
                if (a > 30)
                {
    
    
                        Console.WriteLine("a 大于 30")
                }
                else
                {
    
    
                    Console.WriteLine("a  小于 30")
                }
                Console.WriteLine("a 的值是{0}", a);
                Console.ReadLine();
          }
    }
}

上記のコードをコンパイルして実行すると、結果は次のようになります。

a  小于 30
a的值是20

if...else if...else ステートメント

if ステートメントの後には、オプションの else if…else ステートメントを続けることができ、これを使用して複数の条件をテストできます。

if...else if...else ステートメントを使用する場合は、次の点に注意する必要があります。

if の後には 0 または 1 つの else を続けることができますが、他の if の後に置く必要があります。
if の後には 0 個以上の else if を続けることができますが、else if は else の前になければなりません。
else if が正常に一致すると、他の else if または else はテストされません。
構文は次のとおりです。

if(boolean_expression 1)
{
    
    
   /* 当布尔表达式 1 为真时执行 */
}
else if( boolean_expression 2)
{
    
    
   /* 当布尔表达式 2 为真时执行 */
}
else if( boolean_expression 3)
{
    
    
   /* 当布尔表达式 3 为真时执行 */
}
else 
{
    
    
   /* 当上面条件都不为真时执行 */
}

using System;

namespace DecisionMaking
{
    
    
   
    class Program
    {
    
    
        static void Main(string[] args)
        {
    
    

            /* 局部变量定义 */
            int a = 100;

            /* 检查布尔条件 */
            if (a == 10)
            {
    
    
                /* 如果 if 条件为真,则输出下面的语句 */
                Console.WriteLine("a 的值是 10");
            }
            else if (a == 20)
            {
    
    
                /* 如果 else if 条件为真,则输出下面的语句 */
                Console.WriteLine("a 的值是 20");
            }
            else if (a == 30)
            {
    
    
                /* 如果 else if 条件为真,则输出下面的语句 */
                Console.WriteLine("a 的值是 30");
            }
            else
            {
    
    
                /* 如果上面条件都不为真,则输出下面的语句 */
                Console.WriteLine("没有匹配的值");
            }
            Console.WriteLine("a 的准确值是 {0}", a);
            Console.ReadLine();
        }
    }
}

上記のコードをコンパイルして実行すると、次の結果が生成されます。

一致する値がありません

a 的准确值是 100

ネストされた if ステートメント

C# では、ネストされた if-else ステートメントは有効です。つまり、1 つの if または else if ステートメントを別の if ステートメントまたは else if ステートメント内で使用できます。

文法

if( boolean_expression 1)
{
    
    
   /* 当布尔表达式 1 为真时执行 */
   if(boolean_expression 2)
   {
    
    
      /* 当布尔表达式 2 为真时执行 */
   }
}

if ステートメントをネストするのと同じ方法で、else if…else をネストできます。

using System;

namespace DecisionMaking
{
    
    
   
    class Program
    {
    
    
        static void Main(string[] args)
        {
    
    

            //* 局部变量定义 */
            int a = 100;
            int b = 200;

            /* 检查布尔条件 */
            if (a == 100)
            {
    
    
                /* 如果条件为真,则检查下面的条件 */
                if (b == 200)
                {
    
    
                    /* 如果条件为真,则输出下面的语句 */
                    Console.WriteLine("a 的值是 100,且 b 的值是 200");
                }
            }
            Console.WriteLine("a 的准确值是 {0}", a);
            Console.WriteLine("b 的准确值是 {0}", b);
            Console.ReadLine();
        }
    }
}

上記のコードをコンパイルして実行すると、次の結果が生成されます。

a 的值是 100,且 b 的值是 200
a 的准确值是 100
b 的准确值是 200

switch ステートメント

switch ステートメントを使用すると、変数が複数の値と等しいかどうかをテストできます。それぞれの値はケースと呼ばれ、テスト対象の変数はスイッチ ケースごとにチェックされます。
文法

switch(expression){
    
    
    case constant-expression  :
       statement(s);
       break; 
    case constant-expression  :
       statement(s);
       break; 
  
    /* 您可以有任意数量的 case 语句 */
    default : /* 可选的 */
       statement(s);
       break; 
}

switch ステートメントは次の規則に従う必要があります。

switch ステートメントの式は、整数型または列挙型、あるいは整数型または列挙型に変換する単一の変換関数がクラスにあるクラス型である必要があります。
スイッチには任意の数の case ステートメントを含めることができます。各ケースの後には、比較する値とコロンが続きます。
case の constant-expression は、スイッチ内の変数と同じデータ型を持ち、定数である必要があります。
テストされる変数が case 内の定数と等しい場合、case に続くステートメントは、break ステートメントに遭遇するまで実行されます。
Break ステートメントが見つかると、switch は終了し、制御フローは switch ステートメントの後の次の行にジャンプします。
すべてのケースにブレークを含める必要があるわけではありません。case ステートメントが空の場合、ブレークを含める必要はなく、制御フローはブレークが検出されるまで後続のケースで続行されます。
C# では、あるケース セクションから次のケース セクションに実行を継続することはできません。case ステートメントがすでに実行されている場合は、break またはその他のジャンプ ステートメントを含める必要があります。
switch ステートメントには、switch の最後にオプションのデフォルト ステートメントを含めることができます。デフォルト ステートメントは、上記のいずれの場合にも当てはまらない場合にタスクを実行するために使用されます。また、default には、break ステートメントを含める必要があります。これは良い習慣です。
C# は、ある case ラベルから別の case ラベルへの明示的な浸透をサポートしていません。C# で 1 つの case ラベルから別の case ラベルへの明示的な浸透をサポートしたい場合は、goto a switch-case または goto default を使用できます。

using System;

namespace MyApplication
{
    
    
  class Program
  {
    
    
    static void Main(string[] args)
    {
    
    
      int day = 4;
      switch (day)
      {
    
    
        case 1:
          Console.WriteLine("Monday");
          break;
        case 2:
          Console.WriteLine("Tuesday");
          break;
        case 3:
          Console.WriteLine("Wednesday");
          break;
        case 4:
          Console.WriteLine("Thursday");
          break;
        case 5:
          Console.WriteLine("Friday");
          break;
        case 6:
          Console.WriteLine("Saturday");
          break;
        case 7:
          Console.WriteLine("Sunday");
          break;
      }    
    }
  }
}

実行結果はその日の日付によって異なりますが、この日の私の実行結果は以下の通りです。

Thursday

次の例では、デフォルトのステートメントを含む学生の成績を判断します。

using System;

namespace DecisionMaking
{
    
    
   
    class Program
    {
    
    
        static void Main(string[] args)
        {
    
    
            /* 局部变量定义 */
            char grade = 'B';

            switch (grade)
            {
    
    
                case 'A':
                    Console.WriteLine("很棒!");
                    break;
                case 'B':
                case 'C':
                    Console.WriteLine("做得好");
                    break;
                case 'D':
                    Console.WriteLine("您通过了");
                    break;
                case 'F':
                    Console.WriteLine("最好再试一下");
                    break;
                default:
                    Console.WriteLine("无效的成绩");
                    break;
            }
            Console.WriteLine("您的成绩是 {0}", grade);
            Console.ReadLine();
        }
    }
}

上記のコードをコンパイルして実行すると、次の結果が生成されます。

做得好
您的成绩是 B

ネストされた switch ステートメント

switch は、外側の switch ステートメント シーケンスの一部として使用できます。つまり、switch ステートメントを別の switch ステートメントの内部で使用できます。内側スイッチと外側スイッチの case 定数に共通の値が含まれていても矛盾はありません。
文法

switch(ch1)
{
    
    
   case 'A':
      printf("这个 A 是外部 switch 的一部分" );
      switch(ch2)
      {
    
    
         case 'A':
            printf("这个 A 是内部 switch 的一部分" );
            break;
         case 'B': /* 内部 B case 代码 */
      }
      break;
   case 'B': /* 外部 B case 代码 */
}

using System;

namespace DecisionMaking
{
    
    
   
    class Program
    {
    
    
        static void Main(string[] args)
        {
    
    
            int a = 100;
            int b = 200;

            switch (a)
            {
    
    
                case 100:
                    Console.WriteLine("这是外部 switch 的一部分");
                    switch (b)
                    {
    
    
                        case 200:
                        Console.WriteLine("这是内部 switch 的一部分");
                        break;
                    }
                    break;
            }
            Console.WriteLine("a 的准确值是 {0}", a);
            Console.WriteLine("b 的准确值是 {0}", b);
            Console.ReadLine();
        }
    }
}

上記のコードをコンパイルして実行すると、次の結果が生成されます。

这是外部 switch 的一部分
这是内部 switch 的一部分
a 的准确值是 100
b 的准确值是 200

? : 演算子

前の章で条件演算子 ? : について説明しましたが、これは if…else ステートメントの代わりに使用できます。その一般的な形式は次のとおりです。

Exp1 ? Exp2 : Exp3;
1
ここで、Exp1、Exp2、および Exp3 は式です。コロンの使用と配置に注意してください。
? 式の値は Exp1 によって決まります。Exp1 が true の場合、Exp2 の値が評価され、その結果が ? 式全体の値になります。Exp1 が false の場合、Exp3 の値が評価され、その結果が ? 式全体の値になります。

C# ループ
場合によっては、同じコード ブロックを複数回実行する必要がある場合があります。一般に、ステートメントは順番に実行されます。つまり、関数内の最初のステートメントが最初に実行され、次に 2 番目のステートメントが実行されます。

ループの種類
while ループ
指定された条件が true である限り、C# の while ループ ステートメントはターゲット ステートメントを繰り返し実行します

while(condition)
{
    
    
   statement(s);
}

ここで、ステートメントは、単一のステートメントまたは複数のステートメントのブロックにすることができます。条件には、ゼロ以外の値に対して true となる任意の式を指定できます。条件が true の間、ループを実行します。
条件が false の場合、プログラム フローはループの直後の次のステートメントに進みます。

using System;

namespace Loops
{
    
    
   
    class Program
    {
    
    
        static void Main(string[] args)
        {
    
    
            /* 局部变量定义 */
            int a = 10;

            /* while 循环执行 */
            while (a < 20)
            {
    
    
                Console.WriteLine("a 的值: {0}", a);
                a++;
            }
            Console.ReadLine();
        }
    }
}

上記のコードをコンパイルして実行すると、次の結果が生成されます。

a 的值: 10
a 的值: 11
a 的值: 12
a 的值: 13
a 的值: 14
a 的值: 15
a 的值: 16
a 的值: 17
a 的值: 18
a 的值: 19

for/foreach ループ

for ループは、特定の回数だけ実行するループを作成できる繰り返し制御構造です。
文法

for ( init; condition; increment )
{
    
    
   statement(s);
}

for ループの制御フローは次のとおりです。

init は最初に 1 回だけ実行されます。このステップでは、ループ制御変数を宣言して初期化できます。また、セミコロンが表示されている限り、ここにステートメントを記述することはできません。

次に状態を判断します。true の場合、ループ本体が実行されます。false の場合、ループ本体は実行されず、制御フローは for ループの直後の次のステートメントにジャンプします。

for ループの本体を実行した後、制御の流れは上記の increment ステートメントに戻ります。このステートメントを使用すると、ループ制御変数を更新できます。条件の後にセミコロンが指定されている限り、このステートメントは空白のままにすることができます。

条件が再度評価されます。true の場合、ループが実行され、プロセスが繰り返されます (ループ本体、ステップ値を増分し、条件を再評価します)。for ループは、条件が false になると終了します。

using System;

namespace Loops
{
    
    
   
    class Program
    {
    
    
        static void Main(string[] args)
        {
    
    
            /* for 循环执行 */
            for (int a = 10; a < 20; a = a + 1)
            {
    
    
                Console.WriteLine("a 的值: {0}", a);
            }
            Console.ReadLine();
        }
    }
}

上記のコードをコンパイルして実行すると、次の結果が生成されます。

a 的值: 10
a 的值: 11
a 的值: 12
a 的值: 13
a 的值: 14
a 的值: 15
a 的值: 16
a 的值: 17
a 的值: 18
a 的值: 19

C# は、foreach ループをサポートしており、foreach を使用して配列またはコレクション オブジェクトを反復処理します。

次の例には 3 つの部分があります。

foreach ループを通じて整数配列の要素を出力します。
for ループを通じて整数配列の要素を出力します。
foreach ループは、配列の要素のカウンターを設定します。

class ForEachTest
{
    
    
    static void Main(string[] args)
    {
    
    
        int[] fibarray = new int[] {
    
     0, 1, 1, 2, 3, 5, 8, 13 };
        foreach (int element in fibarray)
        {
    
    
            System.Console.WriteLine(element);
        }
        System.Console.WriteLine();


        // 类似 foreach 循环
        for (int i = 0; i < fibarray.Length; i++)
        {
    
    
            System.Console.WriteLine(fibarray[i]);
        }
        System.Console.WriteLine();


        // 设置集合中元素的计算器
        int count = 0;
        foreach (int element in fibarray)
        {
    
    
            count += 1;
            System.Console.WriteLine("Element #{0}: {1}", count, element);
        }
        System.Console.WriteLine("Number of elements in the array: {0}", count);
    }
}

参考文献:
Runboob.com

おすすめ

転載: blog.csdn.net/weixin_45428910/article/details/131504078