Software_CS1

☆CSharp
(VisualC#)

┌──┐
│目次│
├──┘
◎C#の言語拡張履歴 hist
◎他言語との比較 langref
◆名前付け規則 ncov
◆宣言 def
◎統合開発環境 ide
◆プロジェクト proj
◆コードエディタ editor
◆Windowsフォームデザイナ wind
◆WPFデザイナ wpfd
◆デバッグとビルド debug
◆ドキュメンテーションコメント dcom
◎文法 gra
◆文字 char
◆基本構成 basics
◆データ型 dat
◆ステートメント stat
◆変数 var
◆定数 const
◆配列宣言 array
◆代入 assign
◆演算子 opr
│◎文法(続)


◎C#の言語拡張履歴

◆C# 2.0 (Visual C# 2005)

◆C# 3.0 (Visual C# 2008)


◎他言語との比較


◆名前付け規則

_◇ソースファイル

①c#
│ .cs拡張子
│ ファイル名とクラス名を一致させる必要なし
│ 1ファイルに複数のトップレベルパブリッククラス宣言を含めることができる

②java
│ .java拡張子
│ ファイル名とクラス名を一致させる必要あり
│ 1ファイルには1つのトップレベルパブリッククラス宣言のみ


◆宣言

_◇トップレベル宣言

①c#

    using System.IO;
    namespace Acme
    {
        class Customer
        {

②java

    package Acme;
    import java.io.*;
    class Customer
    {


◎統合開発環境


◆プロジェクト
ソリューション
│ 複数のプロジェクト
│  ソースコード、リソースなど

①コンソールアプリケーション
│ GUIを使わず標準入出力を使ってデータ処理を行う
②Windowアプリケーション
│ Windowsフォーム、WindowsコントロールをつかったGUIアプリケーション
③WPFアプリケーション
│ WPFを使用したアプリケーション
④WPFブラウザアプリケーション
│ WPFを使用してブラウザに表示させるアプリケーション
⑤クラスライブラリ
│ 再利用可能なクラスとコンポーネント
※保存完了すると、ソリューション名で設定した名前のフォルダが作成され、ファイルが保存される。
※ソリューションにはプロジェクトを新規追加したり、既存プロジェクトを追加することもできる。

_◇項目の追加、除外
①クラス、フォームなどを新規追加
②既存項目の追加(追加するファイルを指定)
③プロジェクトから除外では物理的に削除されない
│ 削除により物理消去される。

_◇プロジェクトのプロパティ
ソリューションエクスプローラから
①アプリケーション
│ アセンブリ名や名前空間の設定
│ .NET Frameworkバージョンの変更
②ビルド
③ビルドイベント
│ ビルド前後で実行するコマンドラインなど
④デバッグ
│ 開始オプション設定
⑤設定
⑥参照パス
│ プロジェクトディレクトリに無いアセンブリの参照など
⑦署名
│ ClickOnceマニフェストやアセンブリの署名
⑧セキュリティ
│ ClickOnceアプリケーション用コードアクセスセキュリティなど

※ClickOnce
│ MSのアプリケーションの配布、更新技術。


◆コードエディタ

_◇コードスニペット
│ スニペットはXML形式で.snippetファイルとして追加できる。

_◇インテリセンス
│ 再表示 文字列の最後にカーソルを合わせて
│ CTRLスペース
│ ALT→
│ 確定はTABかENTER

_◇コメントアウト、コメント解除機能

_◇リファクタリング
│ 名前の変更
│ メソッドの抽出(コードの一部を新規メソッドの呼び出しに置き換える)

_◇タスク一覧

_◇構文エラー検索
波形記号
│ 赤 エラー
│ 青 コンテキストにない名前(要再コンパイル)
│ 紫 デバッグ中修正に正しくない箇所あり
│ 緑 警告


◆Windowsフォームデザイナ
│ GUI作成ツール。

①デザインサーフェス
│ コントロールを配置できる領域
②コンポーネントトレイ
│ ユーザインターフェースを持たないコントロールを配置すると、それらを表示するために現れるトレイ

_◇イベントハンドラの生成
│ フォームまたはコントロールをダブルクリック
│ ⇒イベントハンドラが作成され、コードエディタが開く


◆WPFデザイナ
│ XAMLを使ったユーザーインタフェースを作成できる。


◆デバッグとビルド

_◇デバッグモードで実行
│ プログラムをその場で修正し、処理を継続
│ ブレークポイント、トレースポイントの設定、変数値の確認もできる。

①ブレークポイント設定
②ステップ実行
③ローカルウインドウ
│ ブレーク時に現在実行している関数のローカル変数の状態が表示されるウインドウ
④ウオッチウインドウ
│ 式を追加することにより、変数、クラスの値と型の情報を表示できる
⑤呼び出し履歴ウインドウ
│ メソッドの呼び出し履歴
⑥イミディエイトウインドウ
│ 変数値の表示、メソッドの実行テストなど
│ ※キー操作
│ ↑↓ コマンドヒストリ
│ CTRL↑↓ カーソル移動
│ 右クリック(ショートカットメニュー)
│  カットアンドペースト
│ ※コマンド、エイリアス
│ コマンドは最初に「>」を入力
│  Debug.Print または ?
│  値を表示
│  Debug.EvaluateStatement または eval
│  ステートメントを評価
│  File.exit または exit
│  ソリューションを閉じる
│  Tools.LogCommandWindowOutput または log
│  Logファイルにとる
│  Tools.Shell または Shell
│  実行可能プログラム起動
│  alias
│  エイリアス一覧

_◇ビルド、リビルド
│ コンソールアプリケーション、Windowsアプリケーションの場合
│ ⇒ビルドするとexeファイル作成
│ クラスライブラリの場合はDLLが作成される。

※デバッグとリリース
│ デバッグ シンボリックデバッグ情報含まれ、最適化されない。
│ リリース 最適化される。
│ それぞれ、DebugまたはReleaseフォルダ下に作成される。


◆ドキュメンテーションコメント
C#コンパイラの内蔵する、XML形式のドキュメント生成機能

/// から始まるコメントはドキュメントコメントとなる

例)

/// <summary>
/// サマリを書く。
/// </summary>
/// <param name="arg">引数 arg の説明を書く</param>
public void Action(object arg)
{
    。。。

※プロジェクトのプロパティより
構成プロパティ>ビルド>XMLドキュメントファイル
│ 出力したいXMLファイルの名前をいれてビルドする

_◇ドキュメンテーションコメント用タグ

<c> コード(summaryなどの文中に書くもの)
<code> コード(複数行にわたるもの)
<example> サンプル コードの説明(codeと組み合わせて使う)
<exception> 例外クラスの説明
<include> 別のファイルの内容を取り込む
<list> アイテマイズしたいときに使う
<param> そのメソッドの引数に関する説明
<paramref> summaryなどの文中で引数を参照したいときに使う
<permission> メンバーへのアクセスのパーミッションを指定する
<remarks> クラスの説明
<returns> 戻り値の説明
<see> 他のメンバーを参照したいときに使う
<seealso> 他に参照して欲しいものがあるときに使う
<summary> そのクラスやメソッドの概要
<value> プロパティの説明

※APIリファレンス

<summary>~</summary> 「概要」を記述する
<remarks>~</remarks> 「解説」を記述する
<param>~</param> メソッドの「引数」の説明を記述する
<returns>~</returns> メソッドの「戻り値」の説明を記述する
<newpara>~</newpara> 書式設定。「概要」、「解説」、「戻り値」の記述の中に「段落」を作る

◎文法


◆文字
│ 大文字、小文字は区別され、どちらも使える。

※型や変数などの名前の大文字、小文字は区別される。

※基本はUnicode(UTF-16)

_◇エスケープシーケンス
リテラル文字列中でエスケーブ文字を使える。
│ \n 改行
│ \xXX 十六進XX
│ \t タブ
│ @ リテラル文字列に@をつけるとESC無視
│  例) @”Esc\n”
│ \\ \
│ \uUUUU ユニコード文字


◆基本構成

①using Directive
│ ディレクティブで指定された名前空間では完全修飾名なしに、メソッド、プロパティなど使用できる。
│ using 名前空間名;

例)
System.IO.Directory.GetCurrentDirectory();

using System.IO;
と定義することにより
Directory.GetCurrentDirectory();
と記述できる

②名前空間の宣言

    namespace 名前空間名
    {
    
    }

③クラス宣言

    class クラス名
    {
    
    }

④メソッド宣言

    戻り型名 メソッド名(引数)
    {
    
    }

_◇プログラムの実行開始
Mainメソッド
│ プログラムの制御を開始および終了する関数
│ コンソールアプリケーション、Windowsアプリケーションにおいては必須

①クラスもしくは構造体内部で宣言され、Static
│ アクセス修飾子としてPublicとしてはならない
②戻り値として許されるのはvoidかint
│ int戻り値は、Windowsの環境変数ERRORLEVELに格納される。
│ 例)mainメソッド内で
│  return args.Length;
│ 引数の数を戻り値として戻す。
③引数なしでも宣言できるが、string型の配列変数をつけた場合は引数が配列に渡される。

_◇外部アプリケーションの起動と終了コードの取得

using System;
using System.Diagnostics;
 。。。

Process proc;
proc = Process.Start("C:\\ReturnValueTest.exe");
proc.WaitForExit();
Console.WriteLine("Exit Code: {0}", proc.ExitCode);


◆データ型

①変数および定数を宣言する場合は、データ型を指定する必要がある。
②データ型には、
│ 組み込みデータ型
│ クラス
│ 構造体
│ 列挙体
がある。
③データ型には値型と参照型がある。

_◇組み込みデータ型

※例えばC#でのエイリアスは bool であるが、.NET Framework定義名は
│ System.Boolean
のようになっている。どちらの表現でもC#コンパイラは同じコードを生成する

①bool
│ System.Boolean
│ trueかfalseか。

②sbyte
│ System.SByte
│ -128~127.

③byte
│ System.Byte
│ 0~255

④char
│ System.Char
│ \u0000~\uffff, Unicode16ビット文字

⑤short
│ System.Int16
│ -32768~32767

⑥ushort
│ System.UInt16
│ 0~65535

⑦int
│ System.Int32
│ -2147483648~2147483647

⑧uint
│ System.UInt32
│ 0~4294967295
│ 0U

⑨long
│ System.Int64
│ -9,223,372,036,854,775,808~
│  9,223,372,036,854,775,807
│ 0L

⑩ulong
│ System.UInt64
│ 0~18,446,744,073,709,551,615
│ 0UL

⑪float
│ System.Single
│ ±1.5e-45~±3.4e38,32ビット単精度
│ 0.0F
※有効桁数7桁

⑫double
│ System.Double
│ ±5.0e-324~±1.7e308,64ビット倍精度
│ 0.0D
※有効桁数15~16桁

⑬decimal
│ System.Decimal
│ ±1.0e-28~±7.9e28,128ビット10進数
│ 0.0M
※有効桁数28~29桁

⑭string
│ Unicode16ビット文字列
│ 規定値はnull

⑮object
│ 任意の型
│ 規定値はnull

_◇値型と参照型
値型 Value Type
参照型 Reference Type

※参照型 stringとobject
│ ヒープに実際のデータが格納される
│ スタック上にはヒープをポイントするポインタが置かれる
※値型
│ スタック上に実際の値が置かれる。

※クラス:参照型
※構造体:値型
※列挙体:値型

_◇暗黙的な型指定と匿名型
varキーワードと初期値により暗黙的な型指定を行える。主として、匿名型に使われる
│ 例)
│ var a = new {Size=”Large”, Value=8};

_◇リテラル値サフィックス
│ 例)
│ 200L long
│ 58000UL ulong
│ 24.018F float
│ 732.5D double
│ 92800.5M decimal

_◇列挙型
│ 列挙型は列挙子(Enumerator)と呼ばれる名前付き定数の集まりで構成される固有の型である
│ System.EnumはSystem.ValueTypeから継承
│ enum 名前 {列挙子, 。。。 }
※列挙子の元はint型で、通常は0から始まり+1される。列挙子=値とすることで、値指定が可能
※C#の列挙型は型安全である。

例)

enum ShapeColor
{
    Red, Blue, Yellow
}

は、

enum ShapeColor
{
    Red = 0, Blue = 1, Yellow =2
}

と等価。

※列挙型に対する ToString()
引数により文字列値にしたり、数値として表示したりできる
│ G,g 文字列値
│ F,f 文字列値だがビット演算のフラグ
│ D,d 10進数値
│ X,x 16進数値

※Flags属性
1つ以上の列挙型変数をOR演算により結合した場合、その対処が可能となる
例)

[Flags]
public enum IceCreamToppings
{
    HotFudge = 1,
    Cherry = 2,
    WhippedCream = 4
}

※文字列を列挙型に変換
│ EnumクラスのstaticメソッドParseにより鉛管できる

(列挙型名)Enum.Parse(typeof(列挙型名), “文字列”);
│ ⇒適切でない文字列値が与えられるとArgumentExceptionが投げられる
│ ⇒「,」で区切って複数の文字列値を与えると OR演算をした値が得られる

※列挙型に要素が含まれるか否かを調べるために IsDefinedを使うのは問題
│ 必要があるならswitch文でチェックするメソッドを実装した方が良い。

※列挙型フラグの状態確認

例)
※langが列挙型Languageの変数

if ((lang & Language.CSharp) == Language.CSharp)
{
 。。。
}


◆ステートメント

①ステートメントは通常セミコロンで終了する。
②基本的に上から下へ実行される。

_◇コードブロック
│ 中カッコで囲うことで、コードブロックを構成できる。
※コードブロックの実行が終了すると呼び出し元に戻る。Mainメソッドの場合は終了する。

_◇using ステートメント
スコープの定義

using ( IDisposableインタフェース実装オブジェクト )
{
    ...
}

using ([型] 変数名 [= new コンストラクタ])
{
    コードブロック
}

※usingステートメントを抜けると、指定したオブジェクトを廃棄するためにDisposeメソッドが自動的に呼ばれる
※ファイルハンドルやネットワーク接続などの制限のあるリソースをガベージコレクタによらず速やかに開放するのに使われる
※複数のオブジェクトを「,」でつないで指定できる。


◆変数
│ データ型 変数名;

_◇初期値の割り当て
│ データ型 変数名 = リテラル値 | 初期済変数名 | 定数名

_◇null許容型変数
│ 型名に?を追加することで、通常の数値変数にnull参照を代入することができる。
│ 例) int? val = null;

※プロパティ
│ HasValue 値がnullでなければtrueを返す。
│ Value 格納している値を返す
│ (HasValueプロパティがfalseのときにアクセスするとInvalidOperationExceptionがスローされる)

_◇int型メソッド

int型変数.Equals(値)
│ 値と等しいか否か、TrueかFalseを返す。
int型変数.CompareTo(値)
│ 値と比較して相対値を-1,0,1で返す。
int型変数.ToString()
│ 等価な文字列形式に変換した値を返す。

_◇string型メソッド、プロパティ

string型変数.Length
│ 文字数を返すプロパティ
string型変数.ToLower()
│ インスタンスのコピーを小文字に変換した文字列を返す
string型変数.ToUpper()
│ インスタンスのコピーを大文字に変換した文字列を返す
string型変数.StartsWith(“mojiretsu”)
│ 先頭が一致しているか
string型変数.EndsWith(“mojiretsu”)
│ 末尾が一致しているか
string型変数.IndexOf(“mojiretsu”)
│ 最初に一致したインデックス
string型変数.IndexOfAny(new char[] {‘m’,’j’,。。。})
│ いずれかの文字が最初に見つかったインデックス
string型変数.LastIndexOf(“mojiretsu”)
│ 末尾から検索して、最初に一致したインデックス
string型変数.LastIndexOfAny(new char[] {‘m’,’j’,。。。})
│ 末尾から検索して、いずれかの文字が最初に見つかったインデックス
string型変数.Insert(index, “string”)
│ 指定インデックス位置にストリングを挿入した文字列を返す。
string型変数.Replace(index, “string”)
│ 指定インデックス位置にストリングを挿入した文字列を返す。
string型変数.Insert(“string1”, “string2”)
│ 指定文字列を置換した文字列を返す。
string型変数.Remove(index, count)
│ 指定インデックス位置から文字数削除した文字列を返す。
string型変数.Substring(index, count)
│ 指定インデックス位置から文字数だけの部分文字列を返す。
string型変数.PadLeft(count, ‘c’)
│ 文字列を右寄せし、指定文字数になるまでcで左を埋める。
string型変数.PadRight(count, ‘c’)
│ 文字列を左寄せし、指定文字数になるまでcで右を埋める。
string型変数.Trim(new char[] {‘m’,’j’,。。。})
│ 文字列の先頭と末尾に指定した文字の何れかが1つ以上連続しているばあい、それらを削除した文字列を返す。
string型変数.TrimStart(new char[] {‘m’,’j’,。。。})
│ 文字列の先頭に指定した文字の何れかが1つ以上連続しているばあい、それらを削除した文字列を返す。
string型変数.TrimEnd(new char[] {‘m’,’j’,。。。})
│ 文字列の末尾に指定した文字の何れかが1つ以上連続しているばあい、それらを削除した文字列を返す。

_◇文字エンコーディング

※Encoding.Default.GetByteCount(s);
│ 文字列のバイト数を取得するプロパティ

※Encoding.GetBytesメソッドにより、文字列をバイトコードにエンコードできる
①Unicode
│ Encoding.Unicode.GetBytes
②Shift-JIS
│ Encoding.Default.GetBytes

※Encoding.GetStringメソッドにより、バイトコードを文字列にデコードできる
①Unicode
│ Encoding.Unicode.GetString
②Shift-JIS
│ Encoding.Default.GetString

_◇書式指定して文字列取得
string型変数 = string.Format(“FORMAT文字列”,変数);
フォーマット文字列はConsoleクラスで使用のものとおなじ

※書式項目
{index [,alignment][:formatString]}
│ index 値リストの要素識別インデックス、0~
│ alignment フィールド幅。
│  マイナスは左揃、プラスは右揃
│ formatString 書式指定文字列
│  書式指定子xx
│  xxは精度指定子(0~99)
│  C 通貨
│  D 10進数
│  E 指数
│  F 固定小数点
│  G 一般(規定の精度)
│  N 数値形式文字列
│  P パーセント文字列
│  R ラウンドトリップ形式
│  X 16進
│  (小文字にすると小文字で出力)
例)
{0:D},0x30 48
{0:D4},0x30 0048
{0:X},127 7F

※カスタム数値書式指定文字列
│ # 桁プレースホルダ
│ 0 ゼロプレースホルダ
│ % パーセントプレースホルダ
│ . 小数点
│ , 桁区切り
│ ; セクション区切り(正;負;ゼロ)
│ E0 指数表記
│ \ エスケープ文字

※DateTime書式指定
d 短形式日付
D 長形式日付
f 完全日付と短形式時刻
F 完全日付と長形式時刻
g 短形式日付と短形式時刻
G 短形式日付と長形式時刻
M 月日
R RFC1123
s ISO8601 SORT可能
t 短形式時刻
T 長形式時刻
u 標準日付時刻 SORT可能
U 世界協定時日付時刻 SORT可能
Y 年月

※カスタムDateTime指定文字列

_◇string型Tips

※文字列は内部的にはUnicodeである。
Lengthプロパティは文字数を返すので、全角、半角とわず1文字は1文字となる

※「+」演算子はString.Concatメソッドによりオーバーロードされており、文字列の結合ができる

※インデクサにより、文字列の各文字へのアクセスができる
⇒文字の配列のように読み出しアクセスできるが、書き込みはできない

※Splitメソッド例

 char[] delimiter = new char [] {'は'};
 foreach (string sub in s1.Split(delimiter)) {
   Console.WriteLine(sub);
 }

※文字列をShift-JISとして扱う場合
バイトカウント例)

Encoding sjis = Encoding.GetEncoding("shift-jis");
Console.WriteLine(sjis.GetByteCount(s1));

⇒こうして得たエンコーディングオブジェクトでは文字列がShift-JISとして扱われる

※フォーマット文字列
{N[, M][: formatString]}

N:フォーマットされるパラメータ(0ベースのインデックス
M:最小幅。空いている部分には空白文字
⇒通常は左詰めだが、負の数値を指定すると右詰め
formatString:フォーマットを指定文字列
⇒10進数“D”、16進数“X”

※verbatim文字列
文字列定数の前に「@」をつけることで、エスケープ・シーケンスが処理されない。「\」などをそのまま文字列中に記述できる。

_◇volatile
│ コンパイラは、コードの最適化の過程で不要な部分を削除する可能性がある。
│ しかし、マルチスレッドプログラミングにおいては一見不要に見えても実は必要な部分が生じる可能性もある。
※他のスレッドで値が更新されている可能性のある変数には volatile(ヴォラタイル: 揮発性、変わりやすい)という修飾子をつける。
│ volatile 修飾子の付いた変数への値の読み書きは、 コンパイラの最適化によって削除されない。


◆定数

const データ型 定数名 = リテラル値


◆配列宣言

_◇配列

①同じ型の変数を要素として複数含むことができるデータ構造
②インデックスを使って各要素にアクセスする

※GetLengthメソッド
│ 各次元の要素数を得る

※Lengthプロパティ
│ 総要素数を得る

_◇一次元配列
配列宣言例)
int[] array1 = new int[5];
string[] array2 = new string[3]:

※明示的に初期化しなければ、規定値で初期化される。

※配列初期化子
int[] array1 = {10, 20, 30, 40, 50}

_◇多次元配列
配列宣言例)
int[,] array1 = new int[2, 3];
string[,,] array2 = new string[5,2,4]:

※配列初期化子

int[,] array1 =
{
    {1, 2, 3},
    {10, 20, 30}
}

_◇ジャグ配列
│ 「配列の配列」
│ 配列の要素が値ではなく配列である配列
│ ⇒各要素の配列について次元やサイズを個別に設定できる。

宣言例)

    int[][] array = new int [3][];
    array[0] = new int[2];
    array[1] = new int[3];
    array[2] = new int[4];

    int[][] array =
    {
        new int[] {1, 2},
        new int[] {10, 20, 30},
        new int[] {100, 200}
    }

_◇文字列の文字配列への変換

例)

string s4 = "Hello, World";
char[] arr = s4.ToCharArray(0, s4.Length);

foreach (char c in arr)
{
 。。。


◆代入

変数名 = 値 | 演算式

_◇ボックス化とボックス化解除
│ Boxing, Unboxing
│ ボックス化:値型を参照型にする
│ ⇒オブジェクトとして扱うことができる(ヒープにインスタンスが作られ、値はインスタンスにコピーされる)
│ ボックス化解除:参照型を値型にする

※ボックス化、ボックス化解除ともに負担がかかるプロセス。
※ボックス化は暗黙的に行われる

※参照型変数
①参照型の変数値を代入すると参照先へのポインタ情報がコピーされ、同じインスタンスを参照する
②値を代入すると、新たなインスタンスがヒープ上に割り当てられる

_◇キャストと数値上位変換
│ 演算子は複数のデータ型が扱えるようにオーバーロードされている
│ すべての型がサポートされているわけではない。
│ そうでない場合、明示的にキャストが必要になる。

※数値上位変換
│ 数値データを最も近い同等の型に変換する。
│ unsignedがsingedに変換された場合、予期せぬ変換になることもある


◆演算子

_◇算術演算子
+

*
/
% 剰余

_◇文字列連結演算子
+

例)以下は同じ
st1 = st2 + “123”;
st1 += “123”;
st1 = string.Concat(st2, “123”);

_◇論理/ビット演算子
& 論理AND(ブール、ビット)
| 論理OR(ブール、ビット)
^ 論理XOR(ブール、ビット)
~ ビット反転(1の補数)
※int, uint, long, ulongを直接扱えるが、byteデータ型などを扱えるようにオーバーロードされていない。
⇒byte型などに適用する場合はキャストが必要

! ブール否定(ブール型のみ)
&& ブール型の論理AND
|| ブール型の論理OR
true ブール値真
false ブール値偽

_◇インクリメント、デクリメント演算子
++ インクリメント
— デクリメント

※前置
│ インクリメント、デクリメントした値がオペランドの値となる

※後置
│ インクリメント、デクリメントする前の値がオペランドの値となる

_◇シフト演算子

※左シフト
│ シフト対象 << ビット数

※右シフト
│ シフト対象 >> ビット数

_◇関係演算子

==
│ オペランドの値が等しければ真。
│ string型であれば同じ文字列の値であるか否か、
│ 参照型であれば同じオプジェクトを参照しているか否か

!=
<
>
<=
>=

_◇代入演算子

=
│ 右辺のオペランドの値を左辺に代入する。両側の型は同じか、右辺は左辺に暗黙に変換できる必要がある。

+=
-=
*=
/=
%=
&=
|=
^=
<<=
>>=
?? 左のオペランドがnullでない場合には、左を返し、nullなら右を返す。

_◇ラムダ演算子
│ デリゲートで使用。
│ 入力パラメータ => ステートメントまたはブロック

_◇添字演算子
[]
│ 配列、インデクサ、属性で使用

_◇キャスト演算子
()

※明示的型変換(Explicit Conversion)に使用する
<>暗黙の型変換(Implicit Conversion)

※intとstring型などの型変換は, Parseメソッド、ToStringメソッドなどで行う

_◇条件演算子
?
│ 条件 ? 式1 : 式2
│ trueなら式1、falseなら式2

_◇new演算子
│ 新しいオブジェクトを生成し、コンストラクタを呼び出す。

_◇型情報演算子
as 参照型間での変換。エラー時にnullを返す
│ 例)
│ object o1=123; string val1 = o1 as string;
│ この場合nullが入る
│ ※キャスト操作との違いは、変換不能な場合、例外でなくnullを返すこと

is 指定型に互換性があるかどうか返す
│ 例)
│ object o3=123; bool v3 = o3 is string;
│ この場合falseが入る
│ ※例外がスローされることなくキャストできればtrue

sizeof 値型のサイズ
│ 例)
│ sizeof(long)

typeof 型のオブジェクトを取得する
│ 例)
│ System.Type v6 = typeof(int);

_◇メンバアクセス演算子
.(本当は半角)
│ 名前空間のメンバを指定する

_◇名前空間エイリアス修飾子
::
│ 例)
│ global::

_◇演算子の優先度

.[] ++後 –後 new typeof

+単 -単 ! ~ ++前 –前 () true false sizeof

* / %

+ –

<< >>

< > <= >= is as

== !=

&

^

|

&&

||

?:

= += -= *= /= %= &= |= ^= <<= >>= ??

=>