ルルのゲーム開発備忘録

主にUnityやC#に関する情報を気まぐれに投稿していきま~す

【C#】using static ディレクティブ

はじめに

今回は、using staticディレクティブについて紹介します。

using static ディレクティブ

using staticディレクティブを使うと、型名を書かずに対象の型の静的メンバーを記述することができるようになります。
またenum型もusing staticディレクティブを使うと型名なしで記述することができるようになって、コードを少しスマートに書くことができるようになります。

使い方

using static UsingStaticTest.PIKUMIN;

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

void UsingStaticTest()
{
    // いきなりAKA_PIKUMINとかける
    UsingStaticTest.PIKUMIN pikumin = AKA_PIKUMIN;
}

public class UsingStaticTest
{
    public enum PIKUMIN
    {
        AKA_PIKUMIN,
        KI_PIKUMIN,
        AO_PIKUMIN,
        HIKARI_PIKUMIN,
        KORI_PIKUMIN,
    }
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

参考

Unityゲーム プログラミング・バイブル 2nd Generation
https://www.borndigital.co.jp/book/22432.html

【C#】outパラメータ修飾子について

はじめに

今回は、outパラメータ修飾子について紹介します。

outパラメータ修飾子

outパラメータ修飾子を使ったメソッドの特徴

・戻り値はbool。処理成功でtrue、失敗でfalse
・処理成功で、outが付いたパラメータの参照渡しで結果を返す

使い方

C#6.0までは、outのつく変数を事前に宣言しておく必要があったが、C#7.0からは以下のように簡潔に書けるようになった。
今回はint.TryParseを例に使ってみる。

string str = "1";
if (int.TryParse(str, out var number))
{
    number++; // 2
}

参考

Unityゲーム プログラミング・バイブル 2nd Generation
https://www.borndigital.co.jp/book/22432.html

【C#】private protectedについて

はじめに

今回は、private protectedを含めた、C#アセンブリに関連する代表的なアクセス修飾子について3つほど紹介します。
アクセス修飾子ってのはpublicとかprivateとかのやつです。

アセンブリに関連するアクセス修飾子

アクセス修飾子 説明
internal 「同一アセンブリ」のみからアクセス可
protected internal 「同一アセンブリ」または「その型・その派生型」からアクセス可
private protected 「同一アセンブリ」かつ「その型・その派生型」からアクセス可

注意点

protected internalは、internalって名前がついているからなんとなく同じアセンブリからしかアクセスできなさそうな雰囲気を出していますが、前述の通り、継承さえしていれば別アセンブリからでもアクセスできてしまいますの注意が必要です。

参考

Unityゲーム プログラミング・バイブル 2nd Generation
https://www.borndigital.co.jp/book/22432.html

【C#】パラメーターの in 修飾子について

はじめに

今回は、in修飾子について紹介します。

in修飾子

C#7.2からin修飾子が利用可能になりました。
in修飾子はメソッドに引数を渡すときに、参照として渡したいけどメソッド内では参照先の値の書き換えをさせないようにすることができます。

メソッドに値型を参照渡しする方法にはrefを使うこともできますが、refの方は値の書き換えが自由です。
使い方もrefと書いていた部分をinに変えるだけです。

ref修飾子について知りたい方は前回の記事を参考にどうぞ。
rurugamedev-blog.com

使い方

    void InTest(in int num)
    {
        // 値の書き換えをしようとするとコンパイルエラー
        // num = 3;
    }

参考

Unityゲーム プログラミング・バイブル 2nd Generation
https://www.borndigital.co.jp/book/22432.html

【C#】ref修飾 (refパラメータ・ref戻り値・refローカル変数)について

はじめに

今回は、C#ref修飾詞について紹介します。

ref

通常、C#ではメソッドに値型を引数として渡したり戻り値を受け取ったりすると、オブジェクトがコピーされて受け渡しされますがrefを使うことで参照を受渡しするように指定することができます。受渡しするオブジュエクトが大きい場合には無駄なコピーを避けることで、処理を最適化することが可能です。

ref戻り値(参照戻り値)はC#7.2から利用可能になりました。

使い方

    private int num0 = 0; 

    // ref戻り値を使う場合、メソッドの宣言の前にrefをつける
    // refパラメータを使う場合、引数の前にrefをつける
    ref int Test(ref int num)
    {
        // ref戻り値を使う場合、returnする変数の前にrefをつける
        // 今回はint型の引数でわかりにくいが、引数に構造体などを指定してメソッド内で値を変更したりすると、元の構造体の値も当然変更される
        return ref num;
    }

    public void Test1()
    {
        // ref戻り値の受け取りには、refをつけたrefローカル変数で受け取る
        ref int num1 = ref Test(ref num0);

        num1 = 3;
        
        // num1はnum0を参照しているので,num0の値は3になっている
        Debug.Log(num0);
    }

さいごに

ちょこちょこ出てくることがあるので覚えておくといいかもです。

参考

Unityゲーム プログラミング・バイブル 2nd Generation
https://www.borndigital.co.jp/book/22432.html

【C#】パターンマッチング「switch case 型名 変数名 when 条件」

はじめに

今回は「switch文のパターンマッチング + when句」について紹介です。
パターンマッチングについては前回の記事を参考にどうぞ。
rurugamedev-blog.com

switch文のパターンマッチング

C#7.0以降ではswitch文のパターンマッチングが使えます。
またwhen句を使うことでより細かい条件判定が可能です。

switch (vehicle) {
    // Car型の場合
    case Car car:
        car.move();
        break;
    // Train型でかつLengthが100より大きい場合
    case Train train when train.Length > 100:
        train.move();
        break;
}

【C#】型パターンマッチ「is 型名 変数名」

はじめに

今回は、C#7.0から追加された型パターンマッチについて紹介します。
これを使うと、型の判定とキャストを別々にする必要がなくなり、制御フローをよりパワフルかつ簡潔に書けるようになります。

通常の書き方(パターンマッチを使わない)

if(vehicle is Car) {
    Car car = (Car)vehicle;
    car.move();
}else if(vehicle is Train){
    Train train = (Train)vehicle;
    train.move();
}
  • is演算子で型判定
  • さらにif分の中でキャスト

二度手間...

型パターンマッチを使った書き方

if(vehicle is Car car) {
    car.move();
}else if(vehicle is Train train){
    train.move();
}

C#7.0からis演算子の後ろに型パターン(型名 変数名)を書けるようになった。
vehicle is Car carはvehicleがCar型ならtrue、それ以外ならfalseを返す。

このように型の判定とキャストを1行で書けるようになった。

さいごに

使っても特に問題はなさそうなので機会があればどんどん使って簡潔にしていければいいですね。
次の記事ではパターンマッチングの条件をさらに細かくするwhen句について紹介予定です。