ITメモ
C#




【C#】About C#

【C#】
About C#












C#とは


「C#」オフィシャル プログラミングガイド(Microsoft) : https://msdn.microsoft.com/ja-jp/library/67ef8sbd.aspx



2002年に公開された、Microsoft社によって、
「C言語」「C++言語」の後継言語として独自開発されたのが「C#」。
「C言語」を拡張したのが、「C++」で、「C#」は、「C++」に,「Visual Basic」のような生産性を加えた言語。
マイクロソフトが開発した言語で、「マルチパラダイムプログラミング言語」と言われている。
「強い型付け」「命令型」「宣言型」「手続き型」「関数型」「ジェネリック」「オブジェクト指向」の要素を持つのが特徴。

「C#」は、コンパイルして書き出してから実行する「コンパイラ型」の言語ではあるが、
実際は、「コンパイラ型」と「インタープリタ型」の両方の特徴を持っている。
コンパイルして生成される実行プログラムは、
マシン言語ではなく、独自の中間言語「CIL(Common Intermediate Language)」で記述された
「.NET Framework(ドットネットフレームワーク)」と呼ばれる実行環境で動く実行ファイルが生成される。
「.NET Framework」は、その中間言語「CIL」をインタープリタ方式で変換しながら実行するので、
「コンパイラ型」言語でもあり、「インタープリタ型」言語でもあるという2つの側面を持つ。

「C#」で利用される「.NET」方式はのメリットは、
「.NET」のフレームワークが存在する環境であれば、
ハードウェアやOSが異なっていても実行が可能になること。


「C#」の用途

「C#」で作成できるものは、
■ Windowsアプリケーションの開発
■ Webアプリケーションの開発
■ ゲーム開発
■ スマトフォンアプリの開発


Back



「C#」の最初のシンプルプログラム「Hello World」


プログラムを習い始めて、必ずお世話になる「Hello World」のサンプルプログラム。
何故、最初に必ず利用されるのか。
いくつが理由があるんです。
・開発環境にエラーがないかの確認
・コンパイルが正常に機能しているかの確認
・最低限のプログラミングコードの確認
など、結構、重要な役割を果たしています。

「Hello World」プログラムをしっかり記述する必要はないので、
コピー&ペーストをして、コンパイル・実行して確認をしておきましょう。



「Hello World」サンプルプログラム


using System;
namespace HelloWorld
{
class Hello
{
static void Main()
{
Console.WriteLine("Hello World!");

// Keep the console window open in debug mode.
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
}



Back



「C#」の構造


「C#」のプログラム構造


using System;
namespace YourNamespace
{
class YourClass
{
}

struct YourStruct
{
}

interface YourInterface
{
}

delegate int YourDelegate();

enum YourEnum
{
}

namespace YourNestedNamespace
{
struct YourStruct
{
}
}

class YourMainClass
{
static void Main(string[] args)
{
//Your program starts here...
}
}
}



Back



「C#」のコーディング規則


名前付け規則

・修飾名等が長すぎて1行に収まらない場合は、ドット (.) の後で改行可能。


レイアウト規則

・1つの行には 1つのステートメントのみを記述する。
・1つの行には 1つの宣言のみを記述する。
・継続行にインデント、1タブ(4つの空白)分のインデントを設定する。
・メソッド定義とプロパティ定義の間に少なくても1行の空白行を追加する。


コメント規則

・コメントは、コード行の末尾ではなく別の行に記述する。
・コメントのテキストは大文字で開始する。
・コメントのテキストはピリオドで終了する。
・コメント デリミター (//) とコメント テキストの間に空白を 1 つ挿入する。


言語ガイドライン

・短い文字列を連結するときは + 演算子を使用する。
・ループ内で文字列を追加するには、(特に大量のテキストを処理する場合)、StringBuilder オブジェクトを使用する。
・変数の型が割り当ての右側から明らかである場合と、または厳密な型が重要でない場合は、ローカル変数の暗黙の型指定を使用する。
・for ループおよび foreach ループでループ変数の型を決定するときは、暗黙の型指定を使用する。


Back



「C#」のコメントの使い方


「C#」のコメント種類

記述方法種類説明
/* */ ブロックコメント 「/*」「*/」の間で囲まれた部分がコメントとなる。
複数行にわたって、コメントを記述することができるコメントの方法。
// 行コメント 「//」の後から「改行」までがコメントとなる。
改行してコメントを記述したい場合は、再度「//」が必要。


・コメントは、コード行の末尾ではなく別の行に記述する。
・コメントのテキストは、大文字で開始する。
・コメントのテキストは、ピリオドで終了する。
・コメント デリミター (//) とコメントテキストの間に空白を1つ挿入する。
・アスタリスクを整形したブロックでコメントを囲まない。



コメントのサンプルコード



ブロックコメント

/*
コメント内容
コメント内容
コメント内容
*/


「/* */」で囲まれた部分がコメントアウトされるので、
コードを囲い込んで、エラーチェックするのにも利用できる。


行コメント

//コメント内容
Console.WriteLine("Hello World!");//コメント内容


「C#」のコメントは、コメントデリミターの「//」の後から「改行」までがコメントアウトされる。
プログラムコードを1行だけコメントアウトするときにも使える。





Back



「C#」のネームスペースと「using」ディレクティブ


「namespace(ネームスペース)」とは

「namespace(ネームスペース)」は、「名前空間」として、 プログラムの中を区分し、1つのプログラム内に、同名のクラスを共存可能にする仕組み。
ネームスペースが異なれば、同じクラス名で別々の機能を持つプログラムが作成可能になる。
ネームスペースが異なれば、名前が同じクラスでも、まったく別のクラスとして扱える。

使用する際は、必ず「namespace:Class」というように、ネームスペースを指定してクラス名を記述する必要がある。


「namespace(ネームスペース)」の書式

ネームスペース:クラス名



「using」ディレクティブとは

「using」ディレクティブを使うことで、毎回の「ネームスペース」の記述を省略することができる。
プログラムファイルの冒頭に「using」ディレクティブを記述することが条件となるが、
「using」ディレクティブを記述することによって、「ネームスペース:クラス名」の記述が、「クラス名」のみで可能となる。

プログラムの最初には、「C#」に用意されているネームスペースの利用宣言が記述されていることが多いが、
「C#」にある標準装備されている「クラス」「メソッド」「フィールド」などを使うために宣言されている。


「using」ディレクティブの書式

using ネームスペース;

using A;
using System;
using System.CollectionsGeneric;
using System.Linq;
using System.Text;


//「using System」を記述した場合の書式
using System;
Console.WriteLine('出力したい文字');

//「using System」を記述しない場合の書式
System.Console.WriteLine('出力したい文字');


Back



「C#」のキーワード


キーワード 「C#」プログラムのすべての部分で識別子として予約されているキーワード。
コンテキストキーワード 限定された「プログラム コンテキスト」内でのみ特別な意味を持ち、そのコンテキスト外部では、識別子として使用可能。


キーワードは、定義済みの予約されている識別子。
コンパイラに対して特別な意味を持っていて、プリフィックスとして「@」を付けて利用する。

通常、C# 言語に新しいキーワードが追加される場合、
以前のバージョンで記述されたプログラムの実行が中断するのを避けるために、最初は、「コンテキスト キーワード」として追加される。


コンテキスト キーワードを使用して、コード内で特定の意味を与えることが可能。
「C#」において、」「コンテキスト キーワード」は予約語ではないので、「partial」や「where」などの一部の「コンテキスト キーワード」は、複数のコンテキストで特別な意味を持つ。



キーワード一覧

キーワード名解説
abstract
as
base
bool
break
byte
case
catch
char
checked
class
const
continue
decimal
default
delegate
do
double
else
enum
event
explicit
extern
false
finally
固定
float
for
foreach
goto
if
implicit
[in]
in (ジェネリック修飾子)
int
interface
internal
is
lock
long
namespace
new
null
object
operator
[out]
out (ジェネリック修飾子)
override
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
while



コンテキスト キーワード一覧

コンテキストキーワード名解説
add
alias
ascending
async
await
descending
dynamic
from
get
global
group
into
join
let
orderby
partial (型)
partial (メソッド)
remove
select
set
value
var
where (ジェネリック型制約)
where (クエリ句)
yield


Back



「C#」の修飾子


修飾子は、「型」「型メンバー」の宣言を修飾するために使用する。
「クラス」「フィールド」「メソッド」等の性質を決める予約語のことを「修飾子」という。
修飾子を宣言時に記述することで、その性質を付与することができる。


修飾子の分類
・クラス修飾子
・インターフェイス修飾子
・フィールド修飾子
・メソッド修飾子
・コンストラクタ修飾子
・ブロック修飾子



修飾子の一覧

修飾子目的
アクセス修飾子 - public
- private
- internal
- protected

「型」「型のメンバー」で宣言されたアクセシビリティを指定。
アクセスできる範囲を明示的に指定するための修飾子。
abstractクラスが、他のクラスの基本クラスになるためだけのものであることを示す。
async修飾されたメソッド、ラムダ式、または匿名メソッドが非同期であることを示す。
constフィールドまたはローカル変数の値が変更されないことを指定。
eventイベントを宣言。
externメソッドが外部で実装されることを示す。
new基底クラスから継承されたメンバーを明示的に隠ぺい。
override基本クラスから継承された仮想メンバーの新しい実装を提供。
partial同一アセンブリに部分クラス、部分構造体、または部分メソッドを定義する。
readonlyフィールドを宣言する。このフィールドは、宣言の一部として、または同じクラスのコンストラクター内でだけ、値の代入が可能。
sealedクラスの継承ができないことを指定。
static特定のオブジェクトではなく、型自体に所属するメンバーを宣言。
unsafe安全ではないコンテキストを宣言。
virtualメソッドまたはアクセサーを宣言。これらの実装は、派生クラスでオーバーライドするメンバーによって変更可能。
volatileオペレーティング システム、ハードウェア、現在実行中のスレッドなどによって、フィールドがプログラム中で変更される場合があることを示す。


Back



「C#」のプリプロセッサ ディレクティブ


プリプロセッサ ディレクティブは、
通常では、異なる実行環境でソースプログラムを簡単に変更したり、コンパイルしたりするために使用される。
ソース ファイルのディレクティブはプリプロセッサに特定のアクションを実行するよう通知するために使われる。

プリプロセッサ ディレクティブは、1 行に 1 つだけ指定する。



プリプロセッサ ディレクティブの一覧

プリプロセッサ ディレクティブ説明
#if #if を、#else、#elif、#endif、#define、および #undef ディレクティブと組み合わせて使用する。
1つ以上のシンボルの存在に応じて、コードを処理対象にしたり、処理対象から外したりすることが可能。
デバッグ ビルド用にコンパイルするときや、特定の構成でコンパイルするときに使用すると便利。
#else #if を、#else、#elif、#endif、#define、および #undef ディレクティブと組み合わせて使用する。
1つ以上のシンボルの存在に応じて、コードを処理対象にしたり、処理対象から外したりすることが可能。
デバッグ ビルド用にコンパイルするときや、特定の構成でコンパイルするときに使用すると便利。
#elif #if を、#else、#elif、#endif、#define、および #undef ディレクティブと組み合わせて使用する。
1つ以上のシンボルの存在に応じて、コードを処理対象にしたり、処理対象から外したりすることが可能。
デバッグ ビルド用にコンパイルするときや、特定の構成でコンパイルするときに使用すると便利。
#endif #if を、#else、#elif、#endif、#define、および #undef ディレクティブと組み合わせて使用する。
1つ以上のシンボルの存在に応じて、コードを処理対象にしたり、処理対象から外したりすることが可能。
デバッグ ビルド用にコンパイルするときや、特定の構成でコンパイルするときに使用すると便利。
#define #if を、#else、#elif、#endif、#define、および #undef ディレクティブと組み合わせて使用する。
1つ以上のシンボルの存在に応じて、コードを処理対象にしたり、処理対象から外したりすることが可能。
デバッグ ビルド用にコンパイルするときや、特定の構成でコンパイルするときに使用すると便利。
#undef #if を、#else、#elif、#endif、#define、および #undef ディレクティブと組み合わせて使用する。
1つ以上のシンボルの存在に応じて、コードを処理対象にしたり、処理対象から外したりすることが可能。
デバッグ ビルド用にコンパイルするときや、特定の構成でコンパイルするときに使用すると便利。
#warning #warning は、一般に、条件付きディレクティブ内で使用。
#error でユーザー定義のエラーを生成することも可能。
#error #errorは一般的に、条件付きディレクティブ内で使用。
#warning でユーザー定義の警告を生成することも可能。
#line line を使用すると、エラーや警告で出力するコンパイラの行番号とファイル名 (省略可能) を変更可能。
#region #region を使用すると、コードのブロックを指定可能。
#endregion#endregion は、#region ブロックの終了を示す。
#pragma #pragma は、このキーワードが含まれているファイルのコンパイルについて、特殊な命令をコンパイラに指示可能。
命令はコンパイラでサポートされる必要がある。
#pragma warning #pragma warning を使用すると、特定の警告を有効または無効にできる。
#pragma checksumASP.NET ページのデバッグに使用するソース ファイルのチェックサムを生成。


Back



「C#」のステートメント


ステートメントの種類キーワード
選択ステートメントif、else、switch、case
繰り返しステートメントdo、for、foreach、in、while
ジャンプ ステートメントbreak、continue、default、goto、return、yield (C# リファレンス)
例外処理ステートメントthrow、try-catch、try-finally、try-catch-finally
Checked と Uncheckedchecked、unchecked
fixed ステートメント固定
lock ステートメントlock


Back