ヘッダー
C# サンプル集
 

変数の宣言

2021/2/28

→ Visual Basic のサンプルに切り替える

 

 

一般的な変数の宣言

int fileCount;
string customerName;
DateTime birthday;
System.IO.FileInfo logFile;

 

 

new を伴うときにできる簡略な宣言

C# 9.0 では、new を使う場合に簡略な書き方ができます。

Point p = new(1, 2); // C# 9.0 では 型が明示されている場合 new で繰り返す必要がありません。

List<int> numbers = new(); //上記同様 C# 9.0 では new で型を繰り返す必要がありません。

メモ:C# 9.0 を使用するにはフレームワークを .NET 5.0 以上にします。

メモ:宣言後に new する場合でも同じように簡略な書き方ができます。

 

 

初期値の指定

変数に最初に値を代入することを「初期化」と呼びます。

int number1 = 123;
long totalPoint = 100 + 52;
string message = "Hello!"; DateTime expireDate = new DateTime(2024, 6, 27);
DateTime yesterday = DateTime.Now.AddDays(-1); //昨日の日付
System.IO.FileInfo saveFile = null;

メモ:配列やクラス、一部のコレクション(List, Dictionary)では特別な初期化の構文を使用することもできます。

 

 

型推論:型を自動的に決定させる

宣言時に値を代入すると、型名を省略してもC#が型を決定してくれます。これを型推論と呼びます。

var number1 = 123; //int になります。
var totalPoint = 100 + 52; //int になります。
var average = 100 / 32; //int になります。average の値は 3 になります。
var message = "Hello!"; //string になります。
var dueDate = new DateTime(2024, 6, 27); //DateTime になります。
var yesterday = DateTime.Now.AddDays(-1); //DateTime になります。
var saveFile = new System.IO.FileInfo(@"C:\temp\test.txt"); //FileInfo になります。

メモ:どのような型になったかは、その変数宣言の var の上にマウスをホバーさせると表示されます。

メモ:型推論はローカルスコープの変数(つまり、メソッド等の内部の変数)でのみ使用できます。

 

 

分解:値の組み合わせ(タプル)をそれぞれ変数に割り当てる

var (x, y) = (1, 2);

(int a, long b) = (3, 4);

メモ:C# 7.0 の新機能 - C# ガイド | Microsoft Docs

 

 

複数の変数の宣言

int x, y, z;

string xAxis = "時間", yAxis = "ストーリーポイント";

メモ:あまり見かけない宣言方法です。1行ずつ変数を宣言するのが一般的です。

 

 

特殊な名前の変数

変数名の先頭に @ を付けると予約語と同じ名前の変数を宣言できます。

int @int;

string @void;
メモ:このような変数名はそもそも使用すべきではありません。

 

 

アクセスレベル(public, privateなど)を指定

クラスレベルの変数はpublic, protected, private などアクセスレベルを指定するキーワードを使って宣言できます。これらのキーワードなしで宣言した場合は private と同じ効果です。

public string Sku;

private bool isCached;
protected internal IDisposable initializer;

メモ:このように使用する変数は「フィールド」と呼びます。

 

 

静的メンバーとして宣言

クラスレベルの変数は static をつけて宣言すると静的メンバーになります。

public static string Sku;

private static bool isCached;
protected internal static IDisposable initializer;

メモ:このように使用する変数は「フィールド」と呼びます。

 

 

読み取り専用の変数

クラスレベルの変数は readonly を使って宣言することで宣言時の初期化およびコンストラクターおよび init 専用セッターを除いた場所での値の代入ができなくなります。


readonly int seed;

メモ:この機能はわかりにくいので、熟考の後使用してください。

 

 

参考:見慣れないこれは何?

string[] items; //配列の宣言。

double[,] graphs; //二次元配列の宣言。
Uri[] histories = new Uri[10]; //最後の要素のインデックスが9である配列の宣言。

DateTime[,] days = new DateTime[7, 5]; //二次元配列の宣言。
int Amount {get; set;} //プロパティの宣言。 int CommandTimeout => Math.Max(0, timeout); //プロパティの宣言
const decimal rate = 12.3M; //定数の宣言。右辺の M は Decimal のリテラルであることを表します。
int? age; //null許容型
var j = i = 0; //別途宣言されている変数i と j の両方が 0 になります。
var isSame = i == 0; //別途宣言されている変数i の値が 0 であれば isSame は true になり、そうでなければ false になります。

List<Point> locations; // <...> は ジェネリック。

T value; //T はどこかでジェネリック宣言されている型パラメーター。(名前がTであるとは限りませんが慣用的に T とすることが多いです。)
[Obsolete]int x; //属性付きの宣言。クラスレベルの変数でのみ使用できます。
var button = new System.Windows.Forms.Button { Text = "更新" }; //オブジェクト初期化子 を使った宣言。オブジェクト初期化子
var response = new { Status = 301, Location = "xxx" }; //匿名型。
var result = (true, "200 OK"); //タプル。

var files = new string[] {"note.txt", "piano.png", "score.pdf"}; //配列の初期化。
var eras = new List<string> {"M", "T", "S", "H", "R"}; //コレクション初期化子。

var hits = from name in names where name.StartsWith("C#") select name; //右辺は LINQのクエリ式。 LINQ の概要  Func<int,bool> check = (x) => x > 0; //右辺は ラムダ式。ラムダ式 int* p; //ポインター