C#チュートリアル:C#をマスターするために必要な基礎



C#チュートリアルに関するこの記事は、C#の基礎に関する詳細な知識と、理解を深めるためのリアルタイムの例を提供します。

C#は、Javaの致命的な競争相手として2000年にMicrosoftCorporationによって開発された多目的で堅牢なプログラミング言語です。これは、Web開発とデスクトップアプリケーション開発の両方に関して最も人気があり、支配的なプログラミング言語です。

このC#チュートリアルでは、次の概念を学習します。





C#の基本

C#プログラミング言語の概要

90年代初頭、Javaは、Web開発、デスクトップアプリケーション開発、およびその他の多くの分野の主要なプログラミング言語でした。 Microsoftは、Javaをはるかに後回しにする可能性のある多くの高度な機能を備えた競合他社を考え出したいと考えていました。



C#-Tutorial-hejlsberg_bio

それは2000年でした、 アンダース・ヘルスバーグ 彼のMicrosoftチームは、一般にC-Sharpと呼ばれるC#のアイデアを思いつきました。このイニシアチブは、国際規格機構によって承認されました (メジャー) および欧州コンピュータ製造業者協会 (ECMA)。 そして最後に、C#はソフトウェア開発の世界に入ります。

C#プログラミング言語の機能



  • オブジェクト指向プログラミング言語

オブジェクト指向プログラミングアプローチは、C#を最もプログラマーにやさしく、プログラミング言語の開発と保守を容易にするものです。

  • タイプセーフな言語

Type-Safeの意味は、コンパイラが実行権限を持つメモリ位置へのアクセスのみを許可されることです。この機能により、コードの安全性が指数関数的なレベルに向上します。

  • 相互運用性

相互運用性の機能により、C#は、C ++自体を上回るパフォーマンスを実現できる、より効率的な方法でC ++にネイティブなすべてのことを実行できるようになります。

  • 豊富なライブラリ

C#は、開発プロセスに費やされる時間を短縮するために事前にプログラムされた機能を提供する複数の組み込みライブラリへのアクセスを提供します。

  • スケーラブルで更新可能

C#は、他のプログラミング言語の中でも優れているように設計されています。したがって、常に更新に対してオープンであり、その機能によって高度にスケーラブルに保たれます。

  • コンポーネント指向

Microsoftの開発者は、コンポーネントベースのアプローチを使用してC#を開発しました。これは、C#を高度にスケーラブルで最新の状態に保つための最も主要な開発方法です。

  • 構造化言語

構造化プログラミングアプローチは、手順指向プログラミングアプローチと比較して、ソフトウェアのコンパイルと展開の開発が容易になるため、ソフトウェア開発ライフサイクル中に推奨されます。

  • 速い

C#プログラミングは、C ++や他のプログラミング言語と比較して、コンパイルと実行が高速です。

インストール

証明されている Microsoft Visual Studio C#プログラミング用のクラス最高のエディターです。以下の手順に従って、C#プログラムを実行するためのMicrosoft VisualStudioをインストールしてセットアップします。

ステップ1 Microsoft VisualStudioをダウンロードする

Google for the VisualStudioの最新バージョン とダウンロード インストール ローカルシステムにファイルしてから 実行 インストーラーファイル として 管理者。

ステップ2:.NETデスクトップ開発パッケージを選択する

インストーラーを実行すると、Visual Studioエディターがローカルシステムに正常にダウンロードされます。その後、デスクトップ画面にダイアログボックスが表示され、敵に 特定のパッケージ あなたのシステムに必要です。ここでは、を選択する必要があります .NETデスクトップ開発 パッケージ。

ステップ3:C#環境を設定する

一度あなたのパッケージ .NET開発 ダウンロードすると、探している開発環境を尋ねる別のダイアログボックスが画面に表示されます。ここでは、あなたがする必要があります C#の環境を選択します。

ステップ4:最初のプロジェクトを作成する

環境が設定されたら、準備は万端です。 Visual Studioを起動し、 新しいプロジェクトを作成する 表示されたダイアログボックスのオプション。

次のダイアログボックスにリダイレクトされ、そこでクラスライブラリを選択する必要があります。 .NET標準 以下に示すように。

次のダイアログボックスで、次のように求められます プロジェクトを構成する 。それを構成すると、エディターが表示されます。あなたの最初のプログラムを書いて、 実行 それ。出力は正常に表示されます コマンド・プロンプト。

システムクラスEdurekaを使用{staticvoid Main(string [] args){Console.WriteLine( 'Welcome to Edureka!、Happy Learning ..!')}}

//出力:

最初のC#プログラムを実行してみましょう。

C#プログラム構造

最初のC#プログラムを実行したので、その構造を詳しく理解しましょう。単純なC#プログラムには、次の部分があります。

システム名前空間ConsoleApplication1を使用{publicclass Edureka {public static void Main(string [] args){Console.WriteLine( 'Welcome to Edureka!、Happy Learning ..!')}}}

//出力:

Edurekaへようこそ!、Happy Learning ..!

  • クラス: クラスは一般的に次のように定義できます キーワード これは、C#プログラムでクラスを定義するために使用されます。
  • Edureka: の名前です クラス。 クラスは、クラスに関連するメンバーとメソッドを格納する青写真と見なされることがよくあります。
  • メイン: 基本的には 主な方法 C#プログラム全体の中で、プログラムに入るコントロールのゲートウェイとして機能します。プログラムの他のメソッドが実行される前に実行されます。
  • ボイド: コードのこのセグメントは、 戻り値の型 メソッドの。 void以外の任意のデータ型にすることができます。 Voidは、メソッドから返されるデータがないことを意味します。
  • 静的: これは キーワード これは、宣言されたデータメンバーが静的であり、専用メモリが宣言されたメンバーに割り当てられていることを示しています。
  • String [] args: これは、プログラムで使用するコマンドライン引数に似ています。プログラムを実行している間、基本的にいくつかを渡します 引数、 これは、この声明のためにプログラムによって受け入れられます。
  • System.Console.WriteLine( 'Welcome to Edureka!、Happy Learning ..!') ここに、 システム それは 名前空間。 コンソール概説されたカテゴリーはシステム名前空間内。ザ・ WriteLine() それは静的技術コンソールの書き留めるために使用されるカテゴリコンソール上のテキスト。

それでは、C#で利用可能なデータ型について学びましょう。

データ型

C#のデータ型は、以下の3つのカテゴリに分類されます。

値のデータ型

ザ・ 値のデータ型 にあります System.ValueType ライブラリはいつでも直接アクセスできる状態にあり、変数は特定の値に直接割り当てることができます。値データ型は、以下に示すようにさらに2つのタイプに分類されます。

  • 事前定義されたデータ型
  • ユーザー定義のデータ型

事前定義されたデータ型: これらは、私たちが日常のプログラミングで通常使用するものです。これらのデータ型は言語開発者によって事前定義されており、プログラマーがすぐに使用できるようになっています。

例:

int、float、char、shortdoubleなど

ユーザー定義のデータ型: データ型とは異なる値を1つの変数に格納する必要がある場合があります。これらの場合、 事前定義されたデータ型 十分ではありません ユーザー定義の データ型は、ユーザーがカスタマイズできるデータ型のようなものです。

例:構造、列挙型

データ・タイプ 割り当てられたメモリの範囲 メモリー容量
符号付き文字 -128〜127 1バイト
unsigned char 0から127 1バイト
char -128〜127 1バイト
短い署名 -32,768〜32,767 2バイト
unsigned short 0〜65,535 2バイト
ショート -32,768〜32,767 2バイト
署名されたint -2,147,483,648から-2,147,483,647 4バイト
unsigned int 0から4,294,967,295 4バイト
int -2,147,483,648から-2,147,483,647 4バイト
長く署名した -9,223,372,036,854,775,808から9,223,372,036,854,775,807 8バイト
unsigned long 0から18,446,744,073,709,551,615 8バイト
長いです -9,223,372,036,854,775,808から9,223,372,036,854,775,807 8バイト
浮く 1.5 * 10-45 – 3.4 * 1038、(7桁の精度) 4バイト
ダブル 5.0 * 10-324 – 1.7 * 10308、(15桁の精度) 8バイト
10進数 -7.9 * 10-28 – 7.9 * 1028、(28桁の精度) 16バイト


ポインタデータ型

ポインタ型は単純なデータ型です。その機能はCのポインタと完全に似ています。それらは別のポインタのアドレスを格納するように設計されています。

float * ptr

参照データ型

名前は一目瞭然です。ザ・ 参照データ型 実際には変数を格納しません。代わりに、その特定の変数への参照値を格納します。つまり、実際の変数のアドレスを格納します。

参照変数は、以下に示すように3つの異なるタイプに分類されます。

  • オブジェクトタイプ

オブジェクトデータ型は、 System.Object クラス。オブジェクトタイプすることができますに割り当てられたの値他のタイプ、参照タイプ、事前定義済み、ユーザー定義タイプ。しかし、前に割り当て値、それは必要です タイプ 変換。

オブジェクトabcabc = 50 //これはボクシングと呼ばれます
  • ダイナミックタイプ

動的型変数は、ほぼすべての型の値を格納するように設計されています。値の型チェックが実行時に行われるため、動的型と呼ばれます。

動的x = 10
  • 文字列型

文字列型はで利用可能です System.String クラス。文字列型は、文字列リテラルを格納するように設計されています。文字列リテラルは、次の2つの形式で保存されます。2つの形式

    • 引用
    • @quoted。
文字列S = 'Edureka'
  • ザ・ @quoted 文字列リテラルは次のようになります
@'Edureka'

それでは、変数を理解しましょう。

変数

変数は、ユーザーが指定した特定のデータを格納するメモリ位置に割り当てられた名前であり、そのデータには変数名を使用して簡単にアクセスできます。 C#で使用できる変数には5つのタイプがあります

タイプ
ヌル ヌルデータ
ブール値 真と偽
整数 Int、Char、Byte、Short、Long
浮く フロートとダブル
10進数 10進数

例:

int a、b double x float p char abc

C#で変数を宣言するために従うべきルール

  • 変数には、アルファベット、数字、アンダースコアを含めることができます。
  • 変数名は、アルファベットまたはアンダースコアでのみ開始できます。
  • 変数を数字または特殊文字で始めることはできません。
  • 変数名の間に空白を入れることはできません。
  • 予約されたキーワードは、変数名としての使用が制限されています。

演算子

演算子は、特定の数学を実行するようにコンピューターを説明する特別な記号として定義できます。これは、変数のセットに対する論理演算です。 C#には、以下に示すさまざまな演算子が含まれています。

  • 算術演算子
  • 関係演算子
  • 論理演算子
  • ビット演算子
  • 代入演算子

算術演算子

オペレーター 説明
+ A + B 2つのオペランドを追加します
- A – B 2つのオペランドを減算します
* A * B 2つのオペランドを倍数にする
/ A / B 2つのオペランドを分割します
A%B 2つのオペランドの残り
++ ++ インクリメント操作
- に- デクリメント操作

関係演算子

オペレーター 説明
== A == B True、両方のオペランドが等しい場合、それ以外の場合はFalse
!= A!= B True、両方のオペランドが等しくない場合、それ以外の場合はFalse
>> A> B True、Aが大きい場合、それ以外の場合はFalse
< True、Bが大きい場合、それ以外の場合はFalse
> = A> = B True、Aがそれ以上の場合、それ以外の場合はFalse
<= に<= B True、id Bは大いに等しい、そうでない場合はFalse

論理演算子

オペレーター 説明
&& A && B True、両方のオペランドがtrueの場合、それ以外の場合はFalse
|| A || B True、オペランドの1つがtrueの場合、Else False
A! B オペランドの論理状態を反転します

ビット演算子

B A&B A | B A ^ B
1 1 1 1 0
1 0 0 1 1
0 1 0 1 1
0 0 0 0 0
オペレーター 説明
(〜A) Binary Oneの補数演算子は単項であり、ビットを「反転」させる効果があります。
<< に<<2 バイナリ左シフト演算子。左のオペランドの値は、右のオペランドで指定されたビット数だけ左に移動します。
>> A >> 2 バイナリ右シフト演算子。左のオペランドの値は、右のオペランドで指定されたビット数だけ右に移動します。

代入演算子

オペレーター 説明
= A = B + C A = B + C、B + CはAに割り当てられます
+ = A + = B A = A + B、A + BはAに割り当てられます
-= A- = B A = A-B、A-BはAに割り当てられます
* = A- = B A = A * B、A * BはAに割り当てられます
/ = A / = B A = A / B、A / BはAに割り当てられます
%= A%= B A = A%B、A%BはAに割り当てられます
<<= に<<= 2 左シフトおよび代入演算子
>> = A >> = 2 右シフトおよび代入演算子
&= A&= 2 ビットごとの代入演算子
^ = A ^ = 2 ビット単位の排他および代入演算子
| = A!= 2 ビット単位の包含および代入演算子

ループ

ループ ステートメントは、特定の条件が満たされるまでステートメントのブロックを繰り返し実行するために使用されます。 C#言語は、次のループステートメントで構成されています。

  • Forループ
  • Whileループ
  • ループ中

Forループ

ザ・ forループ 指定された条件が満たされるまで、特定のコードセグメントを複数回実行するために使用されます。

構文

for(初期化条件のインクリメント/デクリメント){//コードセグメント}

フローチャート:

例:

System public class ForExample {public static void Main(string [] args){for(int i = 1 i<= 5 i++) { Console.WriteLine(i) } } } 

//出力:

1
2
3
4
5

Whileループ

ザ・ whileループ 特定の条件が満たされるまで、コードセグメントを複数回実行するために使用されます。

構文

while(condition){//実行するコード}

フローチャート:

例:

システム名前空間ループの使用{クラスプログラム{静的voidMain(string [] args){int x = 5 while(x<= 10) { Console.WriteLine('The value of a: {0}', x) x++ } Console.ReadLine() } } } 

//出力:

aの値:5
aの値:6
aの値:7
aの値:8
aの値:9
aの値:10

ループ中

DowhileループはWhileループと完全に似ていますが、唯一の違いは、条件がループの最後に配置されることです。したがって、ループは少なくとも1回は実行されます。

構文

do {//実行するコード} while(condition)

フローチャート:

例:

システム名前空間を使用Edureka {class DoWhileLoop {public static void Main(string [] args){int i = 1、n = 5、product do {product = n * i Console.WriteLine( '{0} * {1} = { 2} '、n、i、product)i ++} while(i<= 10) } } } 

//出力:

5 * 1 = 5
5 * 2 = 10
5 * 3 = 15
5 * 4 = 20
5 * 5 = 25
5 * 6 = 30
5 * 7 = 35
5 * 8 = 40
5 * 9 = 45
5 * 10 = 50

条件付き

条件文 実行に使用されます ステートメント またはのグループ ステートメント いくつかの条件に基づいています。の場合 調子 本当です C#ステートメント それ以外の場合は次の ステートメント 実行されます。

C ++言語のさまざまなタイプの条件文は次のとおりです。

  1. Ifステートメント
  2. If-Elseステートメント
  3. ネストされたIf-elseステートメント
  4. If-ElseIfはしご
  5. Switchステートメント

Ifステートメント

シングル もし 条件が真の場合、C#言語のステートメントを使用してコードを実行します。一方向選択ステートメントとも呼ばれます。

構文

if(boolean-expression){// boolean-expressionがtrueの場合に実行されるステートメント}

フローチャート:

例:

システム名前空間の使用条件付き{クラスIfStatement {public static void Main(string [] args){int number = 2 if(number<5) { Console.WriteLine('{0} is less than 5', number) } Console.WriteLine('This statement is always executed.') } } } 

//出力:

2は5未満です
このステートメントは常に実行されます。

If-Elseステートメント

ザ・ if-else 条件がtrueまたはfalseの場合、C言語のステートメントを使用してコードを実行します。双方向選択ステートメントとも呼ばれます。

構文

if(boolean-expression){// boolean-expressionがtrueの場合に実行されるステートメント} else {// boolean-expressionがfalseの場合に実行されるステートメント}

フローチャート:

例:

システム名前空間の使用条件付き{クラスIfElseStatement {public static void Main(string [] args){int number = 12 if(number<5) { Console.WriteLine('{0} is less than 5', number) } else { Console.WriteLine('{0} is greater than or equal to 5', number) } Console.WriteLine('This statement is always executed.') } } } 

//出力:

12が5以上
このステートメントは常に実行されます。

ネストされたIf-elseステートメント

ネストされた if-else ステートメントは、プログラムが複数のテスト式を必要とする場合に使用されます。多方向選択ステートメントとも呼ばれます。一連の決定がステートメントに含まれる場合、 if-else ネストされた形式のステートメント。

構文

if(boolean-expression){if(nested-expression-1){//実行するコード} else {//実行するコード}} else {if(nested-expression-2){//実行するコード} else {//実行するコード}}

フローチャート:

例:

システム名前空間を使用するConditional {class Nested {public static void Main(string [] args){int first = 7、second = -23、third = 13 if(first&gt second){if(first

//出力:

13が最大です

それ以外の場合-はしごの場合

ザ・ if-else-if ステートメントは、複数の条件から1つのコードを実行するために使用されます。マルチパス決定ステートメントとも呼ばれます。これはif..elseステートメントのチェーンであり、各ifステートメントはelse ifステートメントに関連付けられ、lastはelseステートメントになります。

構文

if(condition1){// condition1がtrueの場合に実行されるコード} else if(condition2){// condition2がtrueの場合に実行されるコード} else if(condition3){// condition3がtrueの場合に実行されるコード} ... else {//すべての条件がfalseの場合に実行されるコード}

フローチャート:

例:

システムクラスEdurekaを使用{publicstatic void Main(String [] args){int i = 20 if(i == 10)Console.WriteLine( 'i is 10')else if(i == 15)Console.WriteLine( ' i is 15 ')else if(i == 20)Console.WriteLine(' i is 20 ')else Console.WriteLine(' i is not present ')}}

//出力:

私は20歳です

Switchステートメント

スイッチ ステートメントは、ケースのリストをテストするために使用される長いif-else-ifラダーの代わりとして機能します。 switchステートメントには、switch式に対してテストされる1つ以上のケースラベルが含まれています。式がケースに一致すると、そのケースに関連付けられたステートメントが実行されます。

構文

switch(variable / expression){case value1://式(または変数)= value1breakの場合に実行されるステートメントcasevalue2://式(または変数)= value1breakの場合に実行されるステートメント..........。 。......デフォルト://一致するケースがない場合に実行されるステートメント}

フローチャート:

例:

システム名前付けを使用するConditional {class SwitchCase {public static void Main(string [] args){char ch Console.WriteLine( 'Enter aalphabet')ch = Convert.ToChar(Console.ReadLine())switch(Char.ToLower(ch )){case'a ':Console.WriteLine(' Vowel ')break case'e':Console.WriteLine( 'Vowel')break case'i ':Console.WriteLine(' Vowel ')break case'o': Console.WriteLine( 'Vowel')break case'u ':Console.WriteLine(' Vowel ')break default:Console.WriteLine(' Not a vowel ')break}}}}

//出力:

アルファベットを入力してください
です
母音

文字列

ストリング データ型はのメンバーです System.String クラス。文字タイプのデータを格納することができます。スティングには、次のようなさまざまな操作を実行できます。連結、比較、部分文字列の取得、検索、トリム、置換など。

文字列と文字列のアナロジー

C#では ストリング そして ストリング 同等です。文字列は キーワード として機能します System.String クラス。どちらのバージョンでも文字列を宣言できます。

構文:

string s1 = 'Edureka' // stringキーワードを使用して文字列を作成するStrings2 = 'Happy Learning' // Stringクラスを使用して文字列を作成する

例:

using System public class StringExample {public static void Main(string [] args){string s1 = 'Edureka' char [] ch = {'C'、 's'、 'h'、 'a'、 'r'、 ' p '、' '、' T '、' u '、' t '、' o '、' r '、' i '、' a '、' l '} string s2 = new string(ch)Console.WriteLine( s1)Console.WriteLine(s2)}}

//出力:

Edureka
Csharpチュートリアル

C#の文字列メソッド

方法 説明
クローン() Stringのこのインスタンスへの参照を返すために使用されます。
Compare(String、String) 指定された2つのStringオブジェクトを比較するために使用されます。
Concat(String、String) Stringの指定された2つのインスタンスを連結します。
含む(文字列) 指定された部分文字列を示す値を返します
Copy(String) 同じ値を持つStringの新しいインスタンスを作成するために使用されます
CopyTo(Int、Char []、Int、Int) 指定された位置から文字をコピーします
Equals(String、String) 2つのStringオブジェクトが同じ値を持つことを決定します。
Format(String、Object) 指定された文字列内の1つ以上のフォーマット項目を置き換えます
IndexOf(String) 最初に発生したゼロベースのインデックスを報告します
Insert(Int32、String) 文字列がインデックスに挿入された新しい文字列を返します。
IsInterned(String) この文字列がUnicode正規化形式Cであることを示します。
IsNullOrEmpty(String) 指定された文字列がnullまたは空の文字列であることを示します。
IsNullOrWhiteSpace(String) 指定された文字列がnull、空、
Join(String、String []) 文字列配列のすべての要素を連結するために使用されます
LastIndexOf(Char) 最後の文字のゼロベースのインデックス位置を報告します
LastIndexOfAny(Char []) 最後の文字のゼロベースのインデックス位置を報告します
Remove(Int32) すべての文字が含まれる新しい文字列を返します
Replace(String、String) 文字列のすべての出現が含まれる新しい文字列を返します
分割(文字[]) 文字列を部分文字列に分割するために使用されます
StartsWith(String) この文字列の先頭かどうかを確認するために使用されます
部分文字列(Int32) このインスタンスから部分文字列を取得するために使用されます。
ToCharArray() このインスタンスの文字をUnicode配列にコピーします。
ToString() Stringのインスタンスを返すために使用されます。
トリム() 文字列をトリミングします


配列

他のプログラミング言語と同様に、C#には配列があります。配列は、要素の同じデータ型を連続したメモリ位置に格納するように設計された単純なデータ構造です。

C#は、次の配列タイプをサポートしています。

  • 一次元配列
  • 多次元配列
  • ギザギザの配列

一次元配列

Single Dimensional Arrayは、要素を1つの単一行の形式で格納します。

構文

int [] arr = new int [5] //配列の作成

例:

System public class ArrayExample {public static void Main(string [] args){int [] arr = new int [5] arr [0] = 10 arr [1] = 20 arr [2] = 30 arr [3] = 40 arr [4] = 50 for(int i = 0 i 

//出力:

10
20
30
40
50

多次元配列

多次元配列は、行列や立方体などの複数の次元の形式で要素を格納します。

構文

int val = a [2,3]

例:

システム名前空間ArrayApplication {クラスMyArray {static void Main(string [] args){int [、] a = new int [5、2] {{0、0}、{1、2}、{2、4}、 {3、6}、{4、8}} int i、j for(i = 0 i<5 i++) { for (j = 0 j < 2 j++) { Console.WriteLine('a[{0},{1}] = {2}', i, j, a[i, j]) } } Console.ReadKey() } } } 

//出力:

a [0,0] = 0
a [0,1] = 0
a [1,0] = 1
a [1,1] = 2
a [2,0] = 2
a [2,1] = 4
a [3,0] = 3
a [3,1] = 6
a [4,0] = 4
a [4,1] = 8

ギザギザの配列

ギザギザの配列は、単に配列の配列です。

例:

システム名を使用するArrayApplication {class MyArray {static void Main(string [] args){int [] [] a = new int [] [] {new int [] {0,0}、new int [] {1,2 }、new int [] {2,4}、new int [] {3、6}、new int [] {4、8}} int i、j for(i = 0 i<5 i++) { for (j = 0 j < 2 j++) { Console.WriteLine('a[{0}][{1}] = {2}', i, j, a[i][j]) } } Console.ReadKey() } } } 

//出力:

a [0] [0] = 0
a [0] [1] = 0
a [1] [0] = 1
a [1] [1] = 2
a [2] [0] = 2
a [2] [1] = 4
a [3] [0] = 3
a [3] [1] = 6
a [4] [0] = 4
a [4] [1] = 8

コレクション

収集は、収集されたデータにいくつかの機能を適用するために、一緒に収集されたオブジェクトのグループと単純に見なすことができます。かつてコレクションに対して実行される可能性のある操作は、

  • オブジェクトを保存する
  • オブジェクトの更新
  • オブジェクトを削除する
  • オブジェクトを取得する
  • 検索オブジェクト、および
  • ソートオブジェクト

コレクションの種類

コレクションを操作するには、3つの異なる可能性があります。 3つの名前空間を以下に示します。

  • System.Collections.Generic クラス
  • System.Collections クラス
  • System.Collections.Concurrent クラス

System.Collections.Genericクラスには、次の種類のクラスがあります。

  • リスト
  • スタック
  • キュー
  • LinkedList
  • HashSet
  • SortedSet
  • 辞書
  • SortedDictionary
  • SortedList

ザ・ System.Collections クラスはレガシークラスと見なされます。次のクラスが含まれます。

  • 配列リスト
  • スタック
  • キュー
  • ハッシュ表

ザ・ System.Collections.Concurrent クラス名前空間は、スレッドセーフな操作のためのクラスを提供します。これで、複数のスレッドがコレクションアイテムへのアクセスに問題を引き起こすことはありません。これで利用可能なクラスは、

  • BlockingCollection
  • ConcurrentBag
  • ConcurrentStack
  • ConcurrentQueue
  • ConcurrentDictionary
  • パーティション
  • パーティション
  • OrderablePartitioner

リスト

ザ・ リスト で利用可能なデータ構造と見なされます System.Collection.Generics 名前空間。要素を保存およびフェッチできます。リストには重複する要素を格納できます。

例:

システムの使用System.Collections.Genericの使用publicclass Edureka {public static void Main(string [] args){var names = new List()names.Add( 'Sandhya')names.Add( 'Arun')names.Add( 'Prashanth')names.Add( 'Kiran')foreach(var name in names){Console.WriteLine(name)}}}

//出力:

Sandhya
アルン
プラシャーント
キラン

ハッシュセット

C#HashSetカテゴリはよく慣れていますお店、取り除くまたはコンポーネントを読む。それしません重複して保存コンポーネント促されます使用する HashSet カテゴリーもしあなたが持っている保存する単独で 独特 コンポーネント それは System.Collections.Generic名前空間にあります。

例:

System.Collections.Genericを使用するSystemを使用するpublicclass Edureka {public static void Main(string [] args){var names = new HashSet()names.Add( 'Sunil')names.Add( 'Amar')names.Add( 'Pujari')names.Add( 'Imran')names.Add( 'karan')foreach(var name in names){Console.WriteLine(name)}}}

//出力:

スニール
アマール
プジャリ
イムラン
カラン

ソートされたセット

C#SortedSetクラスはよく慣れていますお店、 削除する または 読んだ 要素 。昇順を維持し、しません重複して保存要素プロンプトですSortedSetを使用するにはカテゴリーもしあなたが持っている保存する 独特 コンポーネント 昇順を維持します。それはSystem.Collections.Generic名前空間にあります。

例:

System.Collections.Genericを使用するSystemを使用するpublicclass Edureka {public static void Main(string [] args){var names = new SortedSet()names.Add( 'Sanjay')names.Add( 'Anuradha')names.Add( 'Praveen')names.Add( 'Ravi')names.Add( 'Kajol')foreach(var name in names){Console.WriteLine(name)}}}

//出力:

アヌラダ
カジョール
Praveen
ラビ
サンジェイ

スタック

ザ・ スタック 次のシンプルなコレクションです または、そこに格納されている要素を処理している間の最初の最後の手順。

例:

using System using System.Collections.Generic public class Edureka {public static void Main(string [] args){Stack names = new Stack()names.Push( 'Chandan')names.Push( 'Pooja')names.Push( 'James')names.Push( 'Rajesh')names.Push( 'kumar')foreach(string name in names){Console.WriteLine(name)} Console.WriteLine( 'Peek element:' + names.Peek() )Console.WriteLine( 'Pop:' + names.Pop())Console.WriteLine( 'After Pop、Peek element:' + names.Peek())}}

//出力:

クマール
ラジェッシュ
ジェームズ
プージャ
チャンダン
ピーク要素:クマール
ポップ:クマール
ポップ後、ピーク要素:ラジェッシュ

キュー

キューはスタックと完全に似ていますが、唯一の違いはキューが続くことです FIFO または、そこに格納されている要素を処理する際のファーストインおよびファーストアウトの原則。

例:

using System using System.Collections.Generic public class Edureka {public static void Main(string [] args){Queue names = new Queue()names.Enqueue( 'Srujan')names.Enqueue( 'Prajat')names.Enqueue( 'John')names.Enqueue( 'Raju')names.Enqueue( 'Hari')foreach(string name in names){Console.WriteLine(name)} Console.WriteLine( 'Peek element:' + names.Peek() )Console.WriteLine( 'Dequeue:' + names.Dequeue())Console.WriteLine( 'Dequeueの後、要素をピーク:' + names.Peek())}}

//出力:

スルジャン
プラジャット
ジョン
激しい

ピーク要素:Srujan
デキュー:Srujan
デキュー後、要素のピーク:Prajat

リンクリスト

リンクリストは動的メモリコレクションです。リンクリストの要素は、ヒープからメモリにアクセスし、アドレスをリンクして要素を連続した順序で保存することで保存されます。

例:

System.Collections.Genericを使用するSystemを使用するpublicclass Edureka {public static void Main(string [] args){var names = new LinkedList()names.AddLast( 'Rajat')names.AddLast( 'Arun')names.AddLast( 'Prakash')names.AddLast( 'jay')names.AddFirst( 'sai')foreach(var name in names){Console.WriteLine(name)}}}

//出力:

sai
境界
アルン
プラカシュ
ジェイ

辞書

辞書 カテゴリーを使用します考えハッシュテーブルの。値を格納します前提キーの。を含む独特キー単独で。沿って援助キーの、単純に検索または要素を奪うそれはSystem.Collections.Generic名前空間にあります。

例:

using System using System.Collections.Generic public class Edureka {public static void Main(string [] args){Dictionary names = new Dictionary()names.Add( '1'、 'Shiva')names.Add( '2'、 'Prasad')names.Add( '3'、 'Preetam')names.Add( '4'、 'Roy')names.Add( '5'、 'Akash')foreach(KeyValuePair kv in names){コンソール。 WriteLine(kv.Key + '' + kv.Value)}}}

//出力:

1シヴァ
2プラサド
3 Preetam
4ロイ
5Akash

ソートされた辞書

ザ・ SortedDictionary カテゴリーを使用します設計ハッシュテーブルの。値を格納しますアイデアキーの。を含む独特キーを押して昇順を維持しますアイデアキーの。沿って援助キーの、単純に検索または要素を奪うそれはSystem.Collections.Generic名前空間にあります。

例:

using System using System.Collections.Generic public class Edureka {public static void Main(string [] args){SortedDictionary names = new SortedDictionary()names.Add( '1'、 'Arun')names.Add( '4'、 'Vishal')names.Add( '5'、 'Ramesh')names.Add( '3'、 'Vidya')names.Add( '2'、 'Pallavi')foreach(KeyValuePair kv in names){コンソール。 WriteLine(kv.Key + '' + kv.Value)}}}

//出力:

1シヴァ
2プラサド
3 Preetam
4ロイ
5Akash

ソート済みリスト

ザ・ SortedList ですANキーと値のペアの配列。値を格納します前提キーの。 SortedListカテゴリー含まれています独特キーを押して昇順を維持します前提キーの。沿って援助キーの、私たちは簡単にできる検索または削除要素それはで見つかりました System.Collections.Generic 名前空間。

例:

using System using System.Collections.Generic public class Edureka {public static void Main(string [] args){SortedDictionary names = new SortedDictionary()names.Add( '1'、 'Arun')names.Add( '4'、 'Vishal')names.Add( '5'、 'Ramesh')names.Add( '3'、 'Vidya')names.Add( '2'、 'Pallavi')foreach(KeyValuePair kv in names){コンソール。 WriteLine(kv.Key + '' + kv.Value)}}}

//出力:

1アルン
2パラヴィ
3ヴィディア
4ヴィシャール
5ラメッシュ

構造

構造は、異なるデータ型の複数の要素を格納するように設計されたユーザー定義のデータ型です。構造はキーワードを使用して宣言されます 構造体。

例:

System struct Books {public string title public string author public string subject public int book_id} public class Edureka {public static void Main(string [] args){Books Book1 Books Book2 Book1.title = 'C#Programming' Book1.author = ' Ramchandra Kumar'Book1.subject = 'C ++プログラミングチュートリアル' Book1.book_id = 95908978 Book2.title = 'Telecom Billing'Book2.author =' Karan'Book2.subject = 'Telecom Billing Tutorial'Book2.book_id = 18674900 Console.WriteLine( 'Book 1 title:{0}'、Book1.title)Console.WriteLine( 'Book 1 Author:{0}'、Book1.author)Console.WriteLine( 'Book 1 subject:{0}'、Book1.subject) Console.WriteLine( 'Book 1 book_id:{0}'、Book1.book_id)Console.WriteLine( 'Book 2 title:{0}'、Book2.title)Console.WriteLine( 'Book 2 Author:{0}'、 Book2.author)Console.WriteLine( 'Book 2 subject:{0}'、Book2.subject)Console.WriteLine( 'Book 2 book_id:{0}'、Book2.book_id)Console.ReadKey()}}

//出力:

ブック1のタイトル:C#プログラミング
ブック1著者:Ramchandra Kumar
ブック1の主題:C ++プログラミングチュートリアル
ブック1book_id:95908978
ブック2のタイトル:テレコム請求
ブック2著者:カラン
ブック2の主題:電気通信請求チュートリアル
ブック2book_id:18674900

機能

関数は、メインコードのコードのブロックとして定義されます。この関数は、コードブロックで指定されたステートメントを実行するために使用されます。関数は、次のコンポーネントで構成されています。

  • 関数名: これは、関数呼び出しを行うために使用される固有の名前です。
  • 戻り値の型: 関数の戻り値のデータ型を指定します。
  • 体: 実行可能ステートメントが含まれています。
  • アクセス指定子: これは、アプリケーションでの機能のアクセシビリティを指定します。
  • パラメーター: これは、呼び出し中に関数に渡すことができる引数のリストです。

構文

FunctionName(){//関数本体// returnステートメント}

例:

using System namespace FunctionExample {class Edureka {public string Show(string message){Console.WriteLine( 'Inside Show Function')return message} static void Main(string [] args){Edureka program = new Edureka()string message = program .Show( 'To Edureka')Console.WriteLine( 'Welcome' +メッセージ)}}}

//出力:

インサイドショー機能
エドゥレカへようこそ

関数は、次の3つの方法で実行できます。

  • 値による呼び出し
  • 参照による呼び出し
  • アウトパラメータ

値による呼び出し

C#では、 -タイプ パラメーターですそのパスレプリカ元の値の代わりに機能参照。それしません変更する最初の値。アン修正が作成されました合格価値はありません年齢特定の値以内次の例、私たちは持っているパス全体の価値インクルードコール。

例:

システム名前空間の使用CallByValue {クラスEdureka {public void Show(int val){val * = val Console.WriteLine( 'show関数内の値' + val)} static void Main(string [] args){int val = 50 Edureka program = new Edureka()Console.WriteLine( '関数を呼び出す前の値' + val)program.Show(val)Console.WriteLine( '関数を呼び出した後の値' + val)}}}

//出力:

関数を呼び出す前の値50
show関数2500内の値
関数50を呼び出した後の値

参照による呼び出し

Call by Referenceメソッドでは、 ref 引数を参照型として渡すキーワード。元の値のコピーではなく、引数の参照を関数に渡します。渡された値の変更は永続的であり、 変更する 元の変数値。

例:

システム名前空間の使用CallByReference {class Edureka {public void Show(ref int val){val * = val Console.WriteLine( 'show関数内の値' + val)} static void Main(string [] args){int val = 50 Edureka program = new Edureka()Console.WriteLine( '関数を呼び出す前の値' + val)program.Show(ref val)Console.WriteLine( '関数を呼び出した後の値' + val)}}}

//出力:

関数を呼び出す前の値50
show関数2500内の値
関数2500を呼び出した後の値

アウトパラメータ

Outパラメータ提供します でる 引数をout-typeとして渡すキーワード。渡す前に変数を初期化する必要がないことを除けば、参照型に似ています。使用する必要があります でる 引数をout-typeとして渡すキーワード。関数が複数の値を返すようにしたい場合に便利です。

例:

システム名前空間の使用OutParameter {クラスEdureka {public void Show(out int val){int square = 5 val = square val * = val} static void Main(string [] args){int val = 50 Edureka program = new Edureka() Console.WriteLine( '変数を渡す前の値' + val)program.Show(out val)Console.WriteLine( '出力変数を受け取った後の値' + val)}}}

//出力:

変数50を渡す前の値

out変数25を受け取った後

それでは、オブジェクト指向プログラミングに移りましょう。

オブジェクト指向プログラミング

オブジェクト指向プログラミング システムの概念に基づくプログラミングパラダイムです オブジェクト 含まれている データメンバー そして メソッド それらに関連しています。オブジェクト指向プログラミングの主な目的は、プログラムの柔軟性と保守性を高めることです。

オブジェクト指向プログラミングの特徴:

  • 手順よりもデータに重点​​を置いています。
  • プログラムはオブジェクトに分割されているため、操作が簡単です。
  • データ構造は、オブジェクトを特徴付けるように設計されています。
  • 動作する機能 オンオブジェクトのデータは、データ構造にまとめて配置されます。
  • データは非表示であり、許可なく外部関数からアクセスすることはできません。
  • オブジェクト間の通信は、関数を使用して行うことができます。
  • 新しいデータや機能の追加が簡単になりました。
  • プログラム設計ではボトムアップアプローチに従います。

C#のオブジェクト指向パラダイムは次のとおりです

C#での列挙

列挙型 またはとも呼ばれます 列挙 C#では、C#プログラムの実行全体で定数値を変更せずに、定数値を格納するために使用されます。それ季節、日、月、サイズなどの名前付き定数のセットを格納するために使用されます

例:

システムの使用publicclass EnumExample {public enum week {月曜日、火曜日、水曜日、木曜日、金曜日、土曜日、日曜日} public static void Main(){int x =(int)week.Monday int y =(int)week.Friday Console .WriteLine( 'Monday = {0}'、x)Console.WriteLine( 'Friday = {0}'、y)}}

//出力:

月曜日= 0
金曜日= 4

オブジェクト指向プログラミングアプローチ

オブジェクト指向スタイルのプログラミングは、以下に規定する方法に従って実現できます。

カプセル化

カプセル化 を組み合わせる方法です メソッド 彼らと一緒に データメンバー。

例:

システム名前付けの使用Edureka {class Rectangle {public double length public double width public double GetArea(){return length * width} public void Display(){Console.WriteLine( 'Length:{0}'、length)Console.WriteLine( '幅:{0} '、幅)Console.WriteLine('エリア:{0} '、GetArea())}}クラスExecuteRectangle {static void Main(string [] args){Rectangle r = new Rectangle()r.length = 50 r.width = 35 r.Display()Console.ReadLine()}}}

//出力:

長さ:50
幅:35
面積:1750

抽象化

抽象化 する方法です 隠す 必要な情報のみをユーザーに提供することによる、ユーザーからの複雑なコーディング部分。

例:

システムの使用publicabstract class Shape {public abstract void draw()} public class Rectangle:Shape {public override void draw(){Console.WriteLine( 'drawingrectangle ...')}} public class Circle:Shape {public override void draw(){Console.WriteLine( 'drawing circle ...')}} public class TestAbstract {public static void Main(){Shape ss = new Rectangle()s.draw()s = new Circle()s.draw ()}}

//出力:

長方形を描く...
円を描く...

インターフェース

ザ・ インターフェース 抽象化と完全に似ています。インターフェイスの機能は、重要でないデータをユーザーから隠し、ユーザーに必要な唯一の重要なデータを提供することです。

例:

System public interface Drawable {void draw()} public class Rectangle:Drawable {public void draw(){Console.WriteLine( 'drawingrectangle ...')}} public class Circle:Drawable {public void draw(){Console .WriteLine( 'drawing circle ...')}} public class TestInterface {public static void Main(){Drawable dd = new Rectangle()d.draw()d = new Circle()d.draw()}}

//出力:

長方形を描く...
円を描く...

ポリモーフィズム

ポリモーフィズムの組み合わせです 「ポリ」 + 「モーフ」 これは多くの形式を意味します。ギリシャ語です。これは、コードセグメントが複数の形式をとることができることを意味します。ポリモーフィズムには2つのタイプがあります。

  • コンパイル時のポリモーフィズム
  • ランタイムポリモーフィズム

例:

システムの使用publicclass Animal {public string color = 'white'} public class Dog:Animal {public string color = 'black'} public class TestSealed {public static void Main(){Animal d = new Dog()Console.WriteLine( d.color)}}

//出力:

白い

継承

継承 1つのオブジェクトがその親オブジェクトのすべてのプロパティと動作を自動的に取得するプロセスです。他のクラスで定義されている属性と動作を再利用、拡張、または変更できます。別のクラスのメンバーを継承するクラスは、 派生クラス メンバーが継承されるクラスは、 ベース クラス。派生クラスは、基本クラスに特化したクラスです。

単一レベルの継承の例

システム名前付けの使用RectangleApplication {クラスRectangle {保護された倍長保護された倍幅publicRectangle(double l、double w){長さ= l幅= w} public double GetArea(){戻り長さ*幅} public void Display(){コンソール。 WriteLine( '長さ:{0}'、長さ)Console.WriteLine( '幅:{0}'、幅)Console.WriteLine( '領域:{0}'、GetArea())}}クラステーブルトップ:長方形{プライベートdouble cost public Tabletop(double l、double w):base(l、w){} public double GetCost(){double cost cost = GetArea()* 70 return cost} public void Display(){base.Display()Console .WriteLine( 'Cost:{0}'、GetCost())}} class ExecuteRectangle {static void Main(string [] args){Tabletop t = new Tabletop(4.5、7.5)t.Display()Console.ReadLine() }}}

//出力:

長さ:4.5
幅:7.5
面積:33.75
費用:2362.5

マルチレベル継承の例

システム名前付けの使用InheritanceApplication {クラスShape {public void setWidth(int w){width = w} public void setHeight(int h){height = h} protected int width protected int height} public interface PaintCost {int getCost(int area)} class Rectangle:Shape、PaintCost {public int getArea(){return(width * height)} public int getCost(int area){return area * 70}} class RectangleTester {static void Main(string [] args){Rectangle Rect = new Rectangle()int area Rect.setWidth(5)Rect.setHeight(7)area = Rect.getArea()Console.WriteLine( 'Total area:{0}'、Rect.getArea())Console.WriteLine( 'Totalペイントコスト:$ {0} '、Rect.getCost(area))Console.ReadKey()}}}

//出力:

総面積:35
総塗装費:2450ドル

オーバーロード

オーバーロードとは、2つまたはメンバーが同じ名前を使用して宣言されている状況です。同じ名前の2つ以上のメソッドを宣言する場合にも、オーバーロードが発生する可能性があります。両方の例を確認してみましょう。

メンバーのオーバーロード

例:

使用システムpublicclass Edureka {public static int add(int a、int b){return a + b} public static int add(int a、int b、int c){return a + b + c}} public class TestMemberOverloading { public static void Main(){Console.WriteLine(Edureka.add(12、23))Console.WriteLine(Edureka.add(12、23、25))}}

//出力:

35
60

メソッドのオーバーロード

例:

システムの使用publicclass Edureka {public static int add(int a、int b){return a + b} public static float add(float a、float b){return a + b}} public class TestMemberOverloading {public static void Main( ){Console.WriteLine(Edureka.add(12、23))Console.WriteLine(Edureka.add(12.4f、21.3f))}}

//出力:

35
33.699997

オーバーライド

オーバーライドとは、子クラスが親が定義しているのと同じメソッドを定義する状況です。小さな例を通してこれを理解しましょう。

例:

システムの使用publicclass Edureka {public virtual void eat(){Console.WriteLine( 'Eating')}} public class Dog:Edureka {public override void eat(){Console.WriteLine( 'Eating food')}} public class Overriding {public static void Main(){Dog d = new Dog()d.eat()}}

//出力:

食べる食品

名前空間

ザ・ 名前空間 基本的に、プログラムに存在する複数のクラスを処理するために使用されます。名前空間はさまざまな方法で利用できます。

  • System.Console: ここでは、 システム 名前空間になります
  • 名前空間のクラスにアクセスするには、次を使用する必要があります namespacename.classname。
  • 使用できます を使用して キーワードも。

例:

システムを使用するFirstを使用するFirstを使用するFirst {public class Edureka {public void sayWelcome(){Console.WriteLine( 'Welcome To Edureka')}}} namespace Second {public class Happy_Learning {public void sayWishes(){Console.WriteLine( ' Happy Learning ')}}} public class Namespace {public static void Main(){Edureka h1 = new Edureka()Happy_Learning w1 = new Happy_Learning()h1.sayWelcome()w1.sayWishes()}}

//出力:

エドゥレカへようこそ
ハッピーラーニング

ファイル操作

ザ・ ファイル操作 C#で利用できるのは次のとおりです。

操作 説明
BinaryReader バイナリストリームからプリミティブデータを読み取ります。
BinaryWriter プリミティブデータをバイナリ形式で書き込みます。
BufferedStream バイトストリームの一時ストレージ。
ディレクトリ ディレクトリ構造の操作に役立ちます。
DirectoryInfo ディレクトリの操作を実行するために使用されます。
DriveInfo ドライブの情報を提供します。
ファイル ファイルの操作に役立ちます。
FileInfo ファイルの操作を実行するために使用されます。
FileStream ファイル内の任意の場所からの読み取りおよびファイルへの書き込みに使用されます。
MemoryStream メモリに保存されているストリーミングデータへのランダムアクセスに使用されます。
パス情報に対して操作を実行します。
StreamReader バイトストリームから文字を読み取るために使用されます。
StreamWriter ストリームに文字を書き込むために使用されます。
StringReader 文字列バッファからの読み取りに使用されます。
StringWriter 文字列バッファへの書き込みに使用されます。

FileMode

ザ・ FileMode 複数のファイルを開く方法を定義する列挙子です。 FileMode列挙子のメンバーは次のように説明されています。

  • 追加: 既存のファイルを開いてカーソルをファイルの最後に置くか、ファイルが存在しない場合はファイルを作成します。
  • 作成: これは、新しいファイルを作成するように設計されています。
  • 新しく作る: これは、新しいファイルを作成するようにオペレーティングシステムに指定するように設計されています。
  • 開いた: 既存のファイルを開くように設計されています。
  • OpenOrCreate: これは、ファイルが存在する場合はファイルを開く必要があり、存在しない場合は新しいファイルを作成する必要があるオペレーティングシステムを指定するように設計されています。
  • 切り捨て: Truncateは既存のファイルを開き、そのサイズを0バイトに切り捨てます。

FileAccess

FileAccess 列挙子は、特定のファイルにアクセスするために使用されます。以下のメンバーがいます。

  • 読んだ
  • 書く
  • 読み書き

ファイル共有

ザ・ ファイル共有 列挙子は、特定のファイルを共有するために使用されます。以下のメンバーがいます。

  • 継承可能: Inheritableを使用すると、ファイルハンドルで子プロセスに継承を渡すことができます。
  • 無し: 現在のファイルの共有を拒否するものはありません
  • 読んだ: 読み取りでは、ファイルを開いて読み取ることができます。
  • 読み書き: ReadWriteを使用すると、ファイルを開いて読み取りと書き込みを行うことができます。
  • 書く: 書き込みでは、書き込み用にファイルを開くことができます。

イベント

イベントは一般に、ユーザーによって生成されるアクションとして知られています。それは、マウスのクリックであり、キーボードからの1回のキーストロークでさえあるかもしれません。同様に、C#プログラムにもイベントがあります。イベントのジェネレータは、 出版社 イベントの受信者は、 サブスクライバー。

出版社

出版社 イベントとデリゲートの定義が含まれています。ザ・ イベントデリゲート 関連付けはこのオブジェクトで定義されます。 A 出版社 クラスオブジェクトはイベントを呼び出し、他のオブジェクトに通知されます。

サブスクライバー

加入者 イベントを受け入れ、 イベントハンドラ。 ザ・ 委任 パブリッシャークラスでメソッド/ eventを呼び出します ハンドラ サブスクライバークラスの。

例:

システム名前空間を使用Edureka {パブリックデリゲート文字列Del(string str)クラスEventBlock {イベントDelNewEvent public EventBlock(){this.NewEvent + = new Del(this.WelcomeUser)} public string WelcomeUser(string username){return'Welcome To Edureka 。 '+ユーザー名} static void Main(string [] args){EventBlock obj1 = new EventBlock()string result = obj1.NewEvent(' Happy Learning ')Console.WriteLine(result)}}}

//出力:

エドゥレカへようこそ。ハッピーラーニング

ジェネリック

ジェネリック クラスのメンバーとメソッドにプレースホルダーを提供するという概念です。 ランタイム。 ジェネリックを使用して定義できます 角かっこ。 次の例を見てみましょう。

クラスのジェネリック

システム名前空間の使用Edureka {class GenericClass {public GenericClass(T msg){Console.WriteLine(msg)}} class Program {static void Main(string [] args){GenericClass gen = new GenericClass( 'このメッセージはジェネリッククラスからのものです' )GenericClass genI = new GenericClass(123)GenericClass getCh = new GenericClass( 'E')}}}

//出力:

このメッセージはジェネリッククラスからのものです
123
IS

メソッドのジェネリック

システム名前空間の使用Edureka {class GenericClass {public void Show(T msg){Console.WriteLine(msg)}} class Program {static void Main(string [] args){GenericClass genC = new GenericClass()genC.Show( 'Thisメッセージは汎用メソッドからのものです ')genC.Show(321)genC.Show(' H ')}}}

//出力:

このメッセージは一般的な方法からのものです
321
H

代表団

ザ・ 委任 メソッドへの参照として機能します。基本的には 関数ポインタ CおよびC ++で動作しますが、はるかに優れており、タイプセーフです。の代表者 静的メソッド メソッドのみをカプセル化します。の代表者が インスタンス メソッドは、メソッドとインスタンスの両方をカプセル化します。デリゲートの最適な使用法は、 イベント。

例:

システムデリゲートの使用intCalculator(int n)public class Edureka {static int number = 25 public static int add(int n){number = number + n return number} public static int mul(int n){number = number * n return数値} public static int getNumber(){戻り値} public static void Main(string [] args){Calculator c1 = new Calculator(add)Calculator c2 = new Calculator(mul)c1(20)Console.WriteLine( '計算後1つのデリゲート、新しい番号は次のとおりです。 '+ getNumber())c2(3)Console.WriteLine('計算機2つのデリゲートの後、新しい番号は次のようになります: '+ getNumber())}}

//出力:

電卓1代表の後、新しい数は次のとおりです:45
電卓2の委任後、新しい番号は次のようになります:135

反射

実行時にメタデータを取得するには、Reflectionが必要です。リファレンスはで利用可能です System.Reflection 名前空間。実行するには、次のクラスが必要です。

c ++は番号を昇順でソートします
  • タイプ
  • MemberInfo
  • ConstructorInfo
  • MethodInfo
  • FieldInfo
  • PropertyInfo
  • TypeInfo
  • EventInfo
  • モジュール
  • アセンブリ
  • AssemblyName
  • ポインター

型クラス

C#型クラスは、クラス型、インターフェイス型、列挙型、配列型、値型の型宣言を表します

タイププロパティ

Typeクラスの重要なプロパティのリストを以下に示します。

プロパティ 説明
アセンブリ このタイプのアセンブリを取得します。
AssemblyQualifiedName このタイプのアセンブリ修飾名を取得します。
属性 タイプに関連付けられた属性を取得します。
BaseType 基本型または親型を取得します。
フルネーム タイプの完全修飾名を取得します。
IsAbstract タイプが抽象であるかどうかをチェックするために使用されます。
IsArray タイプが配列であるかどうかを確認するために使用されます。
IsClass タイプがクラスであるかどうかを確認するために使用されます。
IsEnum タイプが列挙型であるかどうかを確認するために使用されます。
IsInterface タイプがインターフェイスかどうかを確認するために使用されます。
IsNested タイプがネストされているかどうかを確認するために使用されます。
IsPrimitive タイプがプリミティブかどうかを確認するために使用されます。
IsPointer タイプがポインタかどうかを確認するために使用されます。
IsNotPublic タイプがパブリックでないかどうかを確認するために使用されます。
IsPublic タイプがパブリックかどうかを確認するために使用されます。
IsSealed タイプが封印されているかどうかを確認するために使用されます。
IsSerializable タイプがSerializableであるかどうかを確認するために使用されます。
MemberType タイプがネストされたタイプのメンバータイプであるかどうかを確認するために使用されます。
モジュール タイプのモジュールを取得します。
名前 タイプの名前を取得します。
名前空間 タイプの名前空間を取得します。
プロパティ 説明
GetConstructors() Typeのすべてのパブリックコンストラクターを返します。
GetConstructors(BindingFlags) 指定されたBindingFlagsを持つTypeのすべてのコンストラクターを返します。
GetFields() タイプのすべてのパブリックフィールドを返します。
GetFields(BindingFlags) 指定されたBindingFlagsを持つTypeのすべてのパブリックコンストラクターを返します。
GetMembers() タイプのすべてのパブリックメンバーを返します。
GetMembers(BindingFlags) 指定されたBindingFlagsを持つタイプのすべてのメンバーを返します。
GetMethods() Typeのすべてのパブリックメソッドを返します。
GetMethods(BindingFlags) 指定されたBindingFlagsを持つタイプのすべてのメソッドを返します。
GetProperties() タイプのすべてのパブリックプロパティを返します。
GetProperties(BindingFlags) 指定されたBindingFlagsを持つタイプのすべてのプロパティを返します。
GetType() 現在のタイプを取得します。
GetType(String) 指定された名前のタイプを取得します。

反射の例:

タイプを取得

例:

システムの使用publicclass GetType {public static void Main(){int a = 10 Type type = a.GetType()Console.WriteLine(type)}}

//出力:

System.Int32

アセンブリを取得

例:

System.Reflectionを使用するSystemを使用するpublicclass GetAssembly {public static void Main(){Type t = typeof(System.String)Console.WriteLine(t.Assembly)}}

//出力:

System.Private.CoreLib、Version = 4.0.0.0、Culture = neutral、PublicKeyToken = 7cec85d7bea7798e

タイプ情報の印刷

例:

System.Reflectionを使用するSystemを使用するpublicclass PrintType {public static void Main(){Type t = typeof(System.String)Console.WriteLine(t.FullName)Console.WriteLine(t.BaseType)Console.WriteLine(t.IsClass) Console.WriteLine(t.IsEnum)Console.WriteLine(t.IsInterface)}}

//出力:

本当
誤り
誤り

印刷コンストラクター

例:

using System using System.Reflection public class PrintConstructors {public static void Main(){Type t = typeof(System.String)Console.WriteLine( 'Constructors of {0} type ...'、t)ConstructorInfo [] ci = t .GetConstructors(BindingFlags.Public | BindingFlags.Instance)foreach(ConstructorInfo c in ci){Console.WriteLine(c)}}}

//出力:

System.String型のコンストラクタ...
Void .ctor(Char [])
Void .ctor(Char []、Int32、Int32)
Void .ctor(Char *)
Void .ctor(Char *、Int32、Int32)
Void .ctor(SByte *)
Void .ctor(SByte *、Int32、Int32)
Void .ctor(SByte *、Int32、Int32、System.Text.Encoding)
Void .ctor(Char、Int32)
Void .ctor(System.ReadOnlySpan`1 [System.Char])

印刷方法

例:

using System using System.Reflection public class PrintMethods {public static void Main(){Type t = typeof(System.String)Console.WriteLine( 'Methods of {0} type ...'、t)MethodInfo [] ci = t .GetMethods(BindingFlags.Public | BindingFlags.Instance)foreach(MethodInfo m in ci){Console.WriteLine(m)}}}

//出力:

System.String型のメソッド..
System.String Replace(System.String、System.String)
System.String [] Split(Char、System.StringSplitOptions)
System.String [] Split(Char、Int32、System.StringSplitOptions)
System.String [] Split(Char [])
System.String [] Split(Char []、Int32)
System.String [] Split(Char []、System.StringSplitOptions)
System.String [] Split(Char []、Int32、System.StringSplitOptions)
System.String [] Split(System.String、System.StringSplitOptions)
System.String [] Split(System.String、Int32、System.StringSplitOptions)
System.String [] Split(System.String []、System.StringSplitOptions)
System.String [] Split(System.String []、Int32、System.StringSplitOptions).....。

印刷フィールド

例:

using System using System.Reflection public class PrintFields {public static void Main(){Type t = typeof(System.String)Console.WriteLine( 'Fields of {0} type ...'、t)FieldInfo [] ci = t .GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.NonPublic)foreach(FieldInfo f in ci){Console.WriteLine(f)}}}

//出力:

System.Stringタイプのフィールド..
System.String空

それでは、いくつかの高度なC#プログラミングの概念に移りましょう。

高度なC#の概念

匿名関数

特定の名前がない関数が呼び出されます 匿名 機能。 C#で使用できる匿名関数には2つのタイプがあります

  • ラムダ式
  • 匿名メソッド

例:

システム名前空間の使用LambdaExpressions {クラスEdureka {デリゲートintSquare(int num)static void Main(string [] args){Square GetSquare = x => x * x int j = GetSquare(25)Console.WriteLine( 'Square:' + j)}}}

//出力:

正方形:625

匿名メソッド

ザ・ 匿名メソッド と同じ機能を提供します ラムダ式、 ただし、パラメータリストを無視することができます。

例:

システム名前空間の使用AnonymousMethods {クラスプログラム{パブリックデリゲートvoidAnonymousFun()static void Main(string [] args){AnonymousFun fun =デリゲート(){Console.WriteLine( 'これは無名関数です')} fun()}}}

//出力:

これは無名関数です

マルチスレッド

マルチスレッドは、複数のスレッドが作成され、さまざまなタスクに割り当てられるプロセスです。これにより、一度に複数のジョブを実行することで時間を節約できます。マルチスレッドクラスはで利用可能です System.Threading 名前空間。

System.Threading名前空間

ザ・ System.Threading 名前空間には、マルチスレッドを容易にするためのクラスとインターフェイスが含まれています。スレッドリソースを同期するためのクラスを提供します。一般的に使用されるクラスのリストを以下に示します。

  • ミューテックス
  • タイマー
  • モニター
  • セマフォ
  • ThreadLocal
  • ThreadPool
  • 揮発性

プロセスとスレッド

プロセスは実際には 応用 そしてそれは ヘビー級 成分。一方、スレッドは1つのシングルです モジュール アプリケーション全体の。です 軽量 プロセスと比較して

スレッドのライフサイクル

各スレッドにはライフサイクルがあります。スレッドのライフサイクルは、System.Threading.Threadクラスで定義されています。以下は、任意のスレッドのライフサイクルの段階です。

  • 未開始
  • 実行可能(実行準備完了)
  • ランニング
  • 実行不可
  • デッド

Threadクラスは、次のプロパティとメソッドを提供します。

スレッドのプロパティ

プロパティ 説明
CurrentThread 現在実行中のスレッドのインスタンスを返します。
生きている 現在のスレッドが生きているかどうかをチェックします。
IsBackground 現在のスレッドの値を取得/設定するのはバックグラウンドであるかどうかです。
ManagedThreadId 現在管理されているスレッドの一意のIDを取得するために使用されます。
名前 現在のスレッドの名前を取得または設定するために使用されます。
優先 現在のスレッドの優先度を取得または設定するために使用されます。
ThreadState スレッドの状態を表す値を返すために使用されます。

スレッドメソッド

方法 説明
中絶() スレッドを終了するために使用されます。 ThreadAbortExceptionが発生します。
割り込み() WaitSleepJoin状態のスレッドを中断するために使用されます。
Join() このスレッドが終了するまで、すべての呼び出しスレッドをブロックするために使用されます。
ResetAbort() 現在のスレッドの中止要求をキャンセルするために使用されます。
履歴書() 中断されたスレッドを再開するために使用されます。廃止されました。
Sleep(Int32) 指定されたミリ秒の間、現在のスレッドを一時停止するために使用されます。
開始() スレッドの現在の状態を実行可能に変更します。
サスペンド() 中断されていない場合、現在のスレッドを中断します。廃止されました。
産出() 現在のスレッドの実行を別のスレッドに譲るために使用されます。

メインスレッドの例

System.Threadingを使用するSystemを使用するpublicclass Edureka {public static void Main(string [] args){Thread t = Thread.CurrentThread t.Name = 'MainThread' Console.WriteLine(t.Name)}}

//出力:

MainThread

例外処理

ザ・ 例外 プログラムが実行時にスローするエラーです。プログラムの例外をなくすために、例外処理を実行します。

例外 説明
System.DivideByZeroException 数値をゼロで除算してエラーが発生しました。
System.NullReferenceException nullオブジェクトを参照することによって生成されたエラーを処理します。
System.InvalidCastException 無効な型キャストによって生成されたエラーを処理します。
System.IO.IOException 入出力エラーを処理します。
System.FieldAccessException 無効なプライベート/保護されたアクセスによって生成されたエラー。

C#では、4つのキーワードを使用して実行します 例外処理:

  • 試してみてください
  • キャッチ
  • 最後に、そして
  • スロー
例:
using System public class EdurekExample {public static void Main(string [] args){try {int a = 10 int b = 0 int x = a / b} catch(Exception e){Console.WriteLine(e)} Console.WriteLine ( 'このメッセージはcatchブロックからのものです')}}

//出力:

System.DivideByZeroException:ゼロで除算しようとしました。
ExExaEdurekample.Main(String [] args)のF:C#TutorialC#ProgramsConsoleApp1ConsoleApp1Program.cs:line 10
このメッセージはcatchブロックからのものです

カスタマイズされた例外の例

システムの使用publicclass InvalidAgeException:Exception {public InvalidAgeException(String message):base(message){}} public class Customized {static void validate(int age){if(age<18) { throw new InvalidAgeException('Sorry, Age is expected to be greater than 18') } } public static void Main(string[] args) { try { validate(12) } catch (InvalidAgeException e) { Console.WriteLine(e) } Console.WriteLine('Catch block is being executed now.') } } 

//出力:

InvalidAgeException:申し訳ありませんが、年齢は18歳を超えると予想されます
F:C#TutorialC#ProgramsConsoleApp1ConsoleApp1Program.cs:line 18のCustomized.validate(Int32 age)で
F:C#TutorialC#ProgramsConsoleApp1ConsoleApp1Program.cs:line23のCustomized.Main(String [] args)で
キャッチブロックは現在実行中です。

最後にブロックの例

using System public class FinalExecption {public static void Main(string [] args){try {int a = 10 int b = 0 int x = a / b} catch(Exception e){Console.WriteLine(e)} final {Console .WriteLine( '最後にブロックが実行されます')} Console.WriteLine( 'キャッチブロックが実行されます')}}

//出力:

System.DivideByZeroException:ゼロで除算しようとしました。
F:C#TutorialC#ProgramsConsoleApp1ConsoleApp1Program.cs:line10のFinalExecption.Main(String [] args)で
最後にブロックが実行されます
キャッチブロックが実行されます

システム例外署名

[SerializableAttribute] [ComVisibleAttribute(true)]パブリッククラスSystemException:例外

システム例外コンストラクタ

ビルダー 説明
SystemException() SystemExceptionクラスの新しいインスタンスを初期化するために使用されます。
SystemException

(SerializationInfo、StreamingContext)

これは、シリアル化されたデータを使用してSystemExceptionクラスの新しいインスタンスを初期化するために使用されます。
SystemException(String) これは、指定されたエラーメッセージでSystemExceptionクラスの新しいインスタンスを初期化するために使用されます。
SystemException(String、Exception) これは、指定されたエラーメッセージと、この例外の原因である内部例外への参照を使用して、SystemExceptionクラスの新しいインスタンスを初期化するために使用されます。

システム例外プロパティ

プロパティ 説明
データ これは、例外に関する追加のユーザー定義情報を提供するキーと値のペアのコレクションを取得するために使用されます。
HelpLink これは、この例外に関連付けられたヘルプファイルへのリンクを取得または設定するために使用されます。
HResult これは、特定の例外に割り当てられるコード化された数値であるHRESULTを取得または設定するために使用されます。
InnerException これは、現在の例外の原因となったExceptionインスタンスを取得するために使用されます。
メッセージ 現在の例外を説明するメッセージを取得するために使用されます。
ソース エラーの原因となったアプリケーションの名前を取得または設定するために使用されます。
スタックトレース これは、コールスタック上の直接フレームの文字列表現を取得するために使用されます。
TargetSite これは、現在の例外をスローするメソッドを取得するために使用されます。

システム例外メソッド

メソッド 説明
Equals(Object) 指定されたオブジェクトが現在のオブジェクトと等しいかどうかを確認するために使用されます。
Finalize() これは、リソースを解放し、クリーンアップ操作を実行するために使用されます。
GetBaseException() ルート例外を取得するために使用されます。
GetHashCode() ハッシュコードを取得するために使用されます。
GetObjectData

(SerializationInfo、StreamingContext)

オブジェクトデータを取得するために使用されます。
GetType() 現在のインスタンスのランタイムタイプを取得するために使用されます。
MemberwiseClone() これは、現在のオブジェクトの浅いコピーを作成するために使用されます。
ToString() これは、現在の例外の文字列表現を作成して返すために使用されます。

システム例外の例

システム名前空間の使用CSharpProgram {class SystemExceptionExample {static void Main(string [] args){try {int [] arr = new int [5] arr [10] = 25} catch(SystemException e){Console.WriteLine(e)} }}}

//出力:

System.IndexOutOfRangeException:インデックスが配列の範囲外でした。
F:C#TutorialC#ProgramsConsoleApp1ConsoleApp1Program.cs:line11のCSharpProgram.SystemExceptionExample.Main(String [] args)で

同期

同期は、1つのスレッドのみが特定の時間にリソースにアクセスできるようにする手法である可能性があります。指定されたスレッドがタスクを終了するまで、代替スレッドは中断しません。

マルチスレッドプログラムでは、スレッドが許可されますのリソースにアクセスするには指定された実行時間。スレッドはリソースを共有し、非同期で実行されます。共有リソース(データ)へのアクセス重要なタスクかもしれませんそれは一般的に停止する可能性がありますシステム。私たちはそれに影響を与える傾向があります同期的にスレッドを作成する

同期なしの例

System.Threadingクラスを使用するSystemを使用するEdureka {public void PrintTable(){for(int i = 1 i<= 10 i++) { Thread.Sleep(100) Console.WriteLine(i) } } } class Program { public static void Main(string[] args) { Edureka p = new Edureka() Thread t1 = new Thread(new ThreadStart(p.PrintTable)) Thread t2 = new Thread(new ThreadStart(p.PrintTable)) t1.Start() t2.Start() } } 

//出力:

1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
10
10

同期の例

システムの使用System.Threadingクラスの使用Edureka {public void PrintTable(){lock(this){for(int i = 1 i<= 10 i++) { Thread.Sleep(100) Console.WriteLine(i) } } } } class Program { public static void Main(string[] args) { Edureka p = new Edureka() Thread t1 = new Thread(new ThreadStart(p.PrintTable)) Thread t2 = new Thread(new ThreadStart(p.PrintTable)) t1.Start() t2.Start() } } 

//出力:

1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10

新機能

Microsoftは、C#言語に多くの最新機能を追加しており、その一部を以下に示します。

C#6.0

  • 静的ディレクティブの使用
  • 例外フィルター
  • キャッチ/最終ブロックで待つ
  • 自動プロパティ初期化子
  • ゲッターのみのプロパティのデフォルト値
  • 表情豊かなメンバー
  • ヌルプロパゲーター
  • 文字列補間
  • 演算子の名前
  • 辞書初期化子
  • サービスとしてのコンパイラ(Roslyn)

C#7.0

  • パターンマッチング
  • タプル
  • 脱構築
  • ローカル関数
  • 桁区切り文字
  • バイナリリテラル
  • Refリターンとローカル
  • 式本体のコンストラクターとファイナライザー
  • エクスプレッションボディのゲッターとセッター
  • アウト変数
  • 一般化された非同期戻り値の型

C#7.1

  • 非同期メイン
  • デフォルトの式

C#に基づく面接の質問

C#プログラミング言語に基づく重要なインタビューの質問は、この更新されたものにあります。 。

これで、この「C#チュートリアル」の記事は終わりです。データ構造、構文、機能、およびそれらを使用して実行される操作の重要性を理解していただければ幸いです。 これで、C#でのプログラミングの基本を理解できました。C#チュートリアル、チェックしてください 提供されるトレーニング Javaのような多くの技術に関するEdurekaによる そして多くのさらに、世界中に25万人以上の満足した学習者のネットワークを持つ信頼できるオンライン学習会社は、 私たちへの質問?この「C#チュートリアル」ブログのコメントセクションで言及してください。できるだけ早くご連絡いたします。