C# サンプル集 |
Visual Basic 中学校 > C# サンプル集 > C# サンプル集目次 >
変数の宣言
2021/2/28
目次
一般的な変数の宣言
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);
複数の変数の宣言
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; //ポインター