2020年11月04日
川俣晶の縁側ソフトウェアC# コーディング How Tototal 983 count

【入門級】値を参照できるが代入できない名前を定義する3つの方法

Written By: 川俣 晶連絡先

 サンプルソースのクラスのメンバーN1,N2.N3はいずれも値を持っていますが代入できません。

 しかし、機能に細かい違いがあります。

 N1はconstを利用した例です。constを使って値を定義すると絶対に変更できません。ですから、常にstatic扱いで型名を経由して使います。

 N2はreadonlyを利用した例です。例外的にコンストラクタでのみ書き換えられます。オブジェクト作成時に値が確定する使い方ができます。

 N3はgetのみのプロパティを使用した例です。この場合、値は値を取得する時点で確定します。N3への代入はできませんが、N3の値は可変にできます。

罠の数々 §

  • C#9からは、【初期化の場合のみ書き込みができるプロパティ】も定義可能になる。これはnew C(){N3=xxx}のような書式で値を設定でき、かつそのあとは代入できないプロパティを宣言可能とする
  • constを使った方法はいくら利用してもメモリ消費量は増えない (数値の定数を書いた場合とメモリ消費量は同じ)
  • readonlyを使った方法は基本的に変数宣言なので、変数宣言と同じペースでメモリを消費する
  • プロパティを使った方法がどれぐらいのメモリを使うのかはget節の実装内容次第

参考リンク §

const (C# リファレンス)

readonly (C# リファレンス)

get (C# リファレンス)

 constとreadonlyの違いを把握することは重要だ。上記のconstとreadonlyのリンクの先でも、constとreadonlyの違いは説明されている。上記のリンクを辿って確認してみよう。

リポジトリ §

https://github.com/autumn009/cshowto

Const §

using System;

class Program

{

    class C

    {

        public const int N1 = 123;

        public readonly int N2;

        public int N3 { get => N1 + N2; }

        public C()

        {

            N2 = 456;

        }

    }

    static void Main()

    {

        var obj = new C();

        Console.WriteLine($"N1={C.N1}");

        Console.WriteLine($"N2={obj.N2}");

        Console.WriteLine($"N3={obj.N3}");

    }

}

実行結果

N1=123

N2=456

N3=579

Facebook

COOL C# CREW

C#ハウツー連載の解説増量、カラーのソース、新規書き下ろし追加の読みやすい単行本はこちら。

C#ハウツー: 逆引き入門・こんな機能はどう書くの?
キーワード【 川俣晶の縁側ソフトウェアC# コーディング How To
【C# コーディング How To】の次のコンテンツ
2020年
11月
06日
【入門級】ローカル関数にstaticを付けると本当に速くなるか?
3days 0 count
total 879 count
【C# コーディング How To】の前のコンテンツ
2020年
11月
03日
【入門級】整数配列[1,2,3]からループなしで文字列"1+2+3=6"を生成する
3days 0 count
total 922 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

http://mag.autumn.org/tb.aspx/20201104094408
サイトの表紙【C# コーディング How To】の表紙【C# コーディング How To】のコンテンツ全リスト 【C# コーディング How To】の入手全リスト 【C# コーディング How To】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.