トッカンソフトウェア

C# その他

いままで取り上げてこなかったことをまとめます。

Null許容型

変数定義にはてな(?)をつけると、Null許容型になります。
これを使用すると例えばint型の変数にNullがセットできるようになります。

また、はてなはてな(??)でOracleのNVLのように指定変数がNullの場合に
別の値を適用することができます。
				
using System;
using System.Collections.Generic;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int? i = null;
            Console.WriteLine("null:" + i);
            i += 10;
            Console.WriteLine("+=:" + i);
            i = 20;
            Console.WriteLine("=:" + i);

            int? x1 = null;
            int? x2 = 30;
            int x3 = x1 ?? x2 ?? 0 ;
            Console.WriteLine("??:" + x3);

            Console.Read();
        }        
    }
}


			
実行イメージ


i += 10;を行っている箇所はnullに値をプラスしようとしているので、結果はnullになります。

x1 ?? x2 ?? 0 ; を行っている箇所は、x1がnullなので、次にx2を見に行き、x2がnullでないので、x2を出力
しています。x2もnullの場合、0が出力されます。

プロパティ

プロパティは、getter、setterメソッドをメンバ変数のように扱えるようにしたものです。
処理の部分を省略することもできます。その場合、セットされた値はvalueで取得することができます。
				
using System;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Test test = new Test(0, 1, 2);

            Console.WriteLine("idx0:" + test.idx0);
            Console.WriteLine("idx1:" + test.idx1);
            Console.WriteLine("idx2:" + test.idx2);

            Console.Read();
        }
    }

    class Test
    {
        public int idx0;
        private int __idx1;

        public Test(int x, int y, int z)
        {
            idx0 = x;
            idx1 = y;
            idx2 = z;
        }

        public int idx1
        {
            get { return __idx1; }
            private set { __idx1 = value; }
        }

        public int idx2
        {
            get;
            private set;
        }
    }
}


			
実行イメージ


idx1、idx2は両方ともsetをprivateにしているため、クラスの外からは値のセットできません。
外でも値のセットを行う場合、privateを外して下さい。

ページのトップへ戻る