「C Sharp/変数」の版間の差分
削除された内容 追加された内容
タグ: 2017年版ソースエディター |
推敲 タグ: 2017年版ソースエディター |
||
1 行
=== 変数の宣言 ===
==== 型推論 var ====
変数
:<syntaxhighlight lang="csharp" highlight="5,9,13,17">
38 行
</syntaxhighlight>
C#9 以降、下記のようにアプリケーションを表すクラスやMainメソッドを省略した簡略的な表記が使用できます。
:<syntaxhighlight lang="csharp">
var a = 4;
58 ⟶ 57行目:
</syntaxhighlight>
▲どちらにせよ、初期値のない状態でvarキーワードを使うとエラーになり、コンパイルできません。
error CS0818: An implicitly typed local variable declarator must include an initializer
----
エラー・コード CS0818: 暗黙のうちに型付けされたローカル変数の宣言子には、イニシャライザーを含める必要があります。
似たようなメソッドとして typeof() というのがありますが、これはクラスに対して用いるものと、記法が異なるので、このセクションでのtypeofの説明は省略します。▼
▲似たようなメソッドとして typeof() というのがありますが、これはクラスに対して用いるものと、記法が異なるので、このセクションでのtypeofの説明は省略します。<!ーーをぃをぃーー>
var は型を右辺から推論してくれますが、しかし、いちどある変数の型が指定されたら、C#では、その変数の型は変更できません。
==== 型を指定した宣言 ====
また、変数はvarを使わず
:<syntaxhighlight lang="csharp">
78 ⟶ 76行目:
public class sample {
public static void Main(string[] args) {
int a = 17;▼
▲ int a = 17;
Console.WriteLine(a);
Console.WriteLine( a.GetType() );
}
}
91 ⟶ 88行目:
</syntaxhighlight>
C#
C#
:<syntaxhighlight lang="csharp">
107 ⟶ 102行目:
public class sample {
public static void Main(string[] args) {
Console.WriteLine(a);
}
}
117 ⟶ 110行目:
この仕様は
「カプセル化』という概念は、1990年から2001年にかけて流行した概念で、プログラムの部品を裸の部品として管理するのではなく、『カプセル』と呼ばれるグループにモジュール化してパッケージ化して管理することで、大規模開発の効率化を図ろうというものです。
つまり、C#には、C言語でいうところの「グローバル変数」は無い。開発元のマイクロソフトの公式ドキュメントでも、そう明言されています[https://docs.microsoft.com/ja-jp/dotnet/csharp/fundamentals/object-oriented/ Microsoft Docs 日本語訳『C# のクラス、構造体、レコードの概要』2022/06/10] (2022年6月18日に確認)。
これはつまりC#では、すべての変数は、Javaと同じ様になんらかのクラスに属するメンバです。
もしC#でどこからもアクセスしたい変数を定義したい場合は(ただし同じソースコードファイル内)、下記コードのように単に public class でクラス宣言しておいて、必要に応じてクラス内の変数宣言で static 修飾子をつけて宣言すればいいだけである。
:<syntaxhighlight lang="csharp">
using System;
// このクラス testval がどこからでもアクセスできて書
public class testval{
public static int a = 3;
public static int b =15;
}
public class sample {
public static void Main(string[] args) {
Console.WriteLine(testval.a);
145 ⟶ 136行目:
Console.WriteLine(testval.a);
}
}
165 ⟶ 155行目:
<pre>
test.cs(5,19): error CS0825: The contextual keyword `var' may only appear within a local variable declaration
−−−−
test.cs(5,19): error CS0825:コンテキストキーワード `var' はローカル変数宣言の中でのみ使用可能です。
</pre>
170 ⟶ 162行目:
つまり、C++でいうところの、なんらかの「関数」内でないと(C#でいう「メソッド」内でないと)、varは使えません。
よく分からなければ、どこからでも出来るグローバル変数的なものをC#で作りたい場合、初心者のうちは、Main 関数内で変数宣言すれば、基本的に同じコードファイル中のどこからでもアクセスできるはずです。
177 ⟶ 168行目:
C++などと比べて一見すると面倒そうですし実際に初心者にとっての障壁のひとつですが、C#ではグローバル変数的にどこからでもアクセスできる変数を必要に応じてクラスでグループ化できるという、C++や標準Cにはない利点もあります。
==== 定数の宣言 ====
書
値が変化しないのに「変数」というのも妙ですが、歴史的にそう言うのと、他によい言い回しがないので、そういうものだと割り切ってください。
C#で
var と const は併用できません。<!--???-->
<code>const int a</code> のように型指定(int の部分)といっしょに const を宣言することで使えます。
197 ⟶ 185行目:
public class sample {
public static void Main(string[] args) {
const int a = 4;
Console.WriteLine(a);
// a = 7; // const変数を書
}
}
209 ⟶ 195行目:
4
</syntaxhighlight>
もし、上記コードから<code>const</code>のキーワード部分を消せば、コメントアウトした<code> a = 7; </code> をコメントアウトしなくても実行できるようになります。読者はそれぞれ試してください(ほぼ同じ内容の繰り返しになるので、説明は省略)。
|