「C Sharp」の版間の差分

ナビゲーションに移動 検索に移動
2,874 バイト追加 、 1 か月前
→‎switch式: enumを隣のセクションで追加。
(→‎foraech: foreach を使わずとも、C言語的な従来の記法でも繰り返し処理は可能です。)
(→‎switch式: enumを隣のセクションで追加。)
 
よって、上記コードのように、switch式の結果(右側)では、命令ではなく値だけを指定して事前に用意された変数に代入することになる。別途、その結果を代入した変数をつかって目的の処理をする命令が必要である。
 
==== 列挙型 ====
条件分岐に限った機能ではないのですが、 enum というキーワードを使う列挙型(Enumeration types)という機能が標準C言語の時代からあり、C++にもC#にもenumがあります。
 
enum は下記のように使います。なおコードはMicrosoft Doc のものを、当wikiで紹介した実行環境でも動くように修正したものです。
 
:<syntaxhighlight lang="csharp">
using System;
 
public enum Season
{
Spring,
Summer,
Autumn,
Winter
}
 
public class EnumConversionExample
{
public static void Main()
{
Season a = Season.Autumn;
Console.WriteLine($"Integral value of {a} is {(int)a}"); // output: Integral value of Autumn is 2
 
var b = (Season)1;
Console.WriteLine(b); // output: Summer
 
var c = (Season)4;
Console.WriteLine(c); // output: 4
}
}
 
</syntaxhighlight>
; 実行結果 :<syntaxhighlight lang="text">
Integral value of Autumn is 2
Summer
Winter
</syntaxhighlight>
 
 
まず、C# の enum は、特にクラスで包含する必要はありません。このように enum はC#では特殊なクラスのようなものとして扱われています。
 
enum は、定数のグループを作るためのものであり、ブロック内での定数の宣言順に 0,1,2,3,・・・の定数値を割り当てするものです。なんのためにこれをするかというと、用途は多々考えられますが、よくswitch文への応用が挙げられます。
 
ともかく、enum は広い意味でのクラスの一種なので、要素へのアクセス方法も、<code>Season.Autumn</code>のように
enum型名.変数名
です。なお、enumの要素のことをプログラミング一般で「列挙子」とか「列挙定数」と言います。つまり、
 
:<syntaxhighlight lang="csharp">
public enum 列挙型名
{
列挙子名0,
列挙子名1,
列挙子名2,
列挙子名3
}
</syntaxhighlight>
 
です。
 
広い意味でのクラスの一種と言いましたが、しかしenumはC#よりも昔からあることもあってか、newなどのキーワードによるインスタンスの作成は不要です。そもそも書き換えをしないので、インスタンスの作成は不要です(インスタンスは呼び出し元ごとに書き換えをしたりアレンジしたりするためのものだから)。
 
c# の enum の場合、<code>var b = (Season)1;</code> をenum型名でキャストすることで、割り当て数値→列挙子名への逆引きができます。
 
ですが、列挙子に割り当てられてないものをキャストしようとした場合、そのまま数値が変えされます。割り当てられてない数値が与えられても、そこでプログラムが止まったりはしません。
 
=== 配列 ===
23,094

回編集

案内メニュー