<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>定数 アーカイブ - nyanblog ~にゃんぶろぐ~</title>
	<atom:link href="https://nyanblog2222.com/tag/%E5%AE%9A%E6%95%B0/feed/" rel="self" type="application/rss+xml" />
	<link>https://nyanblog2222.com/tag/定数/</link>
	<description>ちょっとしたことを調べているよ</description>
	<lastBuildDate>Fri, 27 Aug 2021 11:26:29 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7</generator>

<image>
	<url>https://nyanblog2222.com/wp-content/uploads/2021/09/cropped-favicon-32x32.png</url>
	<title>定数 アーカイブ - nyanblog ~にゃんぶろぐ~</title>
	<link>https://nyanblog2222.com/tag/定数/</link>
	<width>32</width>
	<height>32</height>
</image> 
<atom:link rel="hub" href="https://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="https://pubsubhubbub.superfeedr.com"/><atom:link rel="hub" href="https://websubhub.com/hub"/>	<item>
		<title>【C#】constを使用する時の注意点</title>
		<link>https://nyanblog2222.com/programming/c-sharp/1299/</link>
					<comments>https://nyanblog2222.com/programming/c-sharp/1299/#respond</comments>
		
		<dc:creator><![CDATA[nyan2222]]></dc:creator>
		<pubDate>Tue, 16 Jun 2020 09:05:00 +0000</pubDate>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[const]]></category>
		<category><![CDATA[enum]]></category>
		<category><![CDATA[struct]]></category>
		<category><![CDATA[定数]]></category>
		<guid isPermaLink="false">https://nyanblog2222.com/?p=1299</guid>

					<description><![CDATA[<p><img src="https://nyanblog2222.com/wp-content/uploads/2022/11/97.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" fetchpriority="high" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/97.png 1280w, https://nyanblog2222.com/wp-content/uploads/2022/11/97-300x157.png 300w, https://nyanblog2222.com/wp-content/uploads/2022/11/97-1024x536.png 1024w, https://nyanblog2222.com/wp-content/uploads/2022/11/97-768x402.png 768w" sizes="(max-width: 1280px) 100vw, 1280px" />こんにちは。前回は「const、readonly、static readonlyの使い方・違いについて」説明していきました。詳しくは、こちらの記事をご覧ください。 今回は前回入りきらなかった「const」を使用する時の注 [&#8230;]</p>
<p>投稿 <a href="https://nyanblog2222.com/programming/c-sharp/1299/">【C#】constを使用する時の注意点</a> は <a href="https://nyanblog2222.com">nyanblog ~にゃんぶろぐ~</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<img src="https://nyanblog2222.com/wp-content/uploads/2022/11/97.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/97.png 1280w, https://nyanblog2222.com/wp-content/uploads/2022/11/97-300x157.png 300w, https://nyanblog2222.com/wp-content/uploads/2022/11/97-1024x536.png 1024w, https://nyanblog2222.com/wp-content/uploads/2022/11/97-768x402.png 768w" sizes="(max-width: 1280px) 100vw, 1280px" />
<p>こんにちは。前回は「const、readonly、static readonlyの使い方・違いについて」説明していきました。<br>詳しくは、こちらの記事をご覧ください。</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-nyanblog wp-block-embed-nyanblog"><div class="wp-block-embed__wrapper">

<a href="https://nyanblog2222.com/c-sharp/1279/" title="【C#】const、readonly、static readonlyの使い方・違いについて" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" src="https://nyanblog2222.com/wp-content/uploads/2022/11/96-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/96-160x90.png 160w, https://nyanblog2222.com/wp-content/uploads/2022/11/96-120x68.png 120w, https://nyanblog2222.com/wp-content/uploads/2022/11/96-320x180.png 320w, https://nyanblog2222.com/wp-content/uploads/2022/11/96-376x212.png 376w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【C#】const、readonly、static readonlyの使い方・違いについて</div><div class="blogcard-snippet internal-blogcard-snippet">今回はC#の定数の定義について、ご紹介していきます。const、readonly、static readonlyについて、目にしたことはあると思います。では、それぞれの違いや使い方はご存じでしょうか。const：コンパイル時に決定する定数。readonly：読み取り専用のインスタンス。static r...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://nyanblog2222.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">nyanblog2222.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2020.06.15</div></div></div></div></a>
</div></figure>



<p><br>今回は前回入りきらなかった「const」を使用する時の注意点を解説していきます。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">constのバージョン管理問題  </a></li><li><a href="#toc2" tabindex="0">列挙型の代わりに構造体のconstを使わない</a></li><li><a href="#toc3" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">constのバージョン管理問題  </span></h2>



<p>constで宣言した定数は<strong><span style="color:#b78d4a" class="has-inline-color">アクセス修飾子をpublicにすべきでない</span></strong>。と言われています。<br>なぜかというと、const定数はコンパイル時点で値が決定します。<br>例えば、クラスライブラリのMyClassには、constの定数”MAX_COUNT”が宣言されています。</p>



<pre class="wp-block-code cs"><code><strong>public</strong> <strong>class</strong> <strong>MyClass</strong> {
  <strong>public</strong> <strong>const</strong> <strong>int</strong> MAX_COUNT = 25;
}</code></pre>



<p>Program.exeに含まれるProcessクラスでは、ライブラリを読み込んでMyClass.MAX_COUNTを使います。</p>



<pre class="wp-block-code cs"><code><strong>public</strong> <strong>class</strong> <strong>Process</strong> {
  <strong>for</strong>(<strong>int</strong> i = 0; i &lt; MyClass.MAX_COUNT; i++) {
    …
  }
}</code></pre>



<p>仕様が変わりMAX_COUNTが30になったので、constの定数を変更しました。</p>



<pre class="wp-block-code cs"><code>public class MyClass {
  public const int MAX_COUNT = 30;
}</code></pre>



<p>このとき、クラスライブラリだけコンパイルして差し替えた場合、Program.exeで使用するときはMyClass.MAX_COUNTの値はどうなるでしょうか？</p>



<p>…正解は<strong><span class="has-inline-color has-pale-pink-color">MyClass.MAX_COUNTの値は25</span></strong>になります。</p>



<p>理由はProgram.exeで使用しているMyClass.MAX_COUNTの値は<strong><span style="color:#b78d4a" class="has-inline-color">Program.exeをコンパイルするときに値が決まっているから</span></strong>です。</p>



<p>これをバージョンアップするときに起こる問題として、<strong><span style="color:#b78d4a" class="has-inline-color">constのバージョン管理問題</span></strong>や<strong><span style="color:#b78d4a" class="has-inline-color">constのバージョニング問題</span></strong>と言います。</p>



<h2 class="wp-block-heading"><span id="toc2">列挙型の代わりに構造体のconstを使わない</span></h2>



<p>構造体のconstで、列挙型のような使い方をすると、予期せぬ不具合を生み出すことがあります。</p>



<p>こちらは構造体での使用例です。<br>12行目でstatusに&#8221;5&#8243;を設定していますが、何も問題なく<strong><span style="color:#b78d4a" class="has-inline-color">ビルドが通ります</span></strong>。</p>



<p>しかし、開発者はStatus構造体内の定数を設定したいはずなので、statusに&#8221;5&#8243;を代入してしまうことは以降の処理で不具合を起こしかねません。</p>



<pre class="wp-block-code cs"><code>struct Status
{
    public const int INIT = 0;
    public const int FAILED = 1;
    public const int SUCCESS = 2;
    public const int FINAL = 3;
}

var status = Status.INIT;

// Statusには存在しない値を設定できる
status = 5;</code></pre>



<p>続いて、列挙型での使用例です。<br>12行目のように列挙型での宣言後、<strong><span style="color:#b78d4a" class="has-inline-color">Statusに存在しない値を設定すると、ビルドエラー</span></strong>になります。</p>



<pre class="wp-block-code cs"><code>enum Status
{
    INIT = 0;
    FAILED = 1;
    SUCCESS = 2;
    FINAL = 3;
}

var status = Status.INIT;

// Statusに存在しない値を設定すると、ビルドエラーになる
status = 5;</code></pre>



<h2 class="wp-block-heading"><span id="toc3">まとめ</span></h2>



<p>今回は前回の定数の解説に引き続き、「const」に焦点を当てて注意点を解説していきました。</p>



<p>特に<strong><span style="color:#b78d4a" class="has-inline-color">「バージョン管理問題」</span></strong>は現象が起こった際にハマりやすいところだと思いますので、頭の片隅に置いておいた方が良いと思います！</p>



<p>良かったら他の記事もご覧になってください。</p>
<p>投稿 <a href="https://nyanblog2222.com/programming/c-sharp/1299/">【C#】constを使用する時の注意点</a> は <a href="https://nyanblog2222.com">nyanblog ~にゃんぶろぐ~</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nyanblog2222.com/programming/c-sharp/1299/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【C#】const、readonly、static readonlyの使い方・違いについて</title>
		<link>https://nyanblog2222.com/programming/c-sharp/1279/</link>
					<comments>https://nyanblog2222.com/programming/c-sharp/1279/#respond</comments>
		
		<dc:creator><![CDATA[nyan2222]]></dc:creator>
		<pubDate>Mon, 15 Jun 2020 09:00:00 +0000</pubDate>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[const]]></category>
		<category><![CDATA[readonly]]></category>
		<category><![CDATA[static]]></category>
		<category><![CDATA[定数]]></category>
		<guid isPermaLink="false">https://nyanblog2222.com/?p=1279</guid>

					<description><![CDATA[<p><img src="https://nyanblog2222.com/wp-content/uploads/2022/11/96.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/96.png 1280w, https://nyanblog2222.com/wp-content/uploads/2022/11/96-300x157.png 300w, https://nyanblog2222.com/wp-content/uploads/2022/11/96-1024x536.png 1024w, https://nyanblog2222.com/wp-content/uploads/2022/11/96-768x402.png 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" />こんにちは。今回はC#の定数の定義について、ご紹介していきます。 const、readonly、static readonlyについて、目にしたことはあると思います。では、それぞれの違いや使い方はご存じでしょうか。 特に [&#8230;]</p>
<p>投稿 <a href="https://nyanblog2222.com/programming/c-sharp/1279/">【C#】const、readonly、static readonlyの使い方・違いについて</a> は <a href="https://nyanblog2222.com">nyanblog ~にゃんぶろぐ~</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<img src="https://nyanblog2222.com/wp-content/uploads/2022/11/96.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/96.png 1280w, https://nyanblog2222.com/wp-content/uploads/2022/11/96-300x157.png 300w, https://nyanblog2222.com/wp-content/uploads/2022/11/96-1024x536.png 1024w, https://nyanblog2222.com/wp-content/uploads/2022/11/96-768x402.png 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" />
<p>こんにちは。今回はC#の定数の定義について、ご紹介していきます。</p>



<p><strong><span style="color:#b78d4a" class="has-inline-color">const、readonly、static readonly</span></strong>について、目にしたことはあると思います。<br>では、それぞれの違いや使い方はご存じでしょうか。</p>



<p>特に今まで曖昧だった方向けに本記事をご覧になっていただければと思います。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-4" checked><label class="toc-title" for="toc-checkbox-4">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">constについて</a><ol><li><a href="#toc2" tabindex="0">使用例</a></li></ol></li><li><a href="#toc3" tabindex="0">readonlyについて</a><ol><li><a href="#toc4" tabindex="0">使用例</a></li><li><a href="#toc5" tabindex="0">補足</a></li></ol></li><li><a href="#toc6" tabindex="0">static readonlyについて</a><ol><li><a href="#toc7" tabindex="0">使用例</a></li></ol></li><li><a href="#toc8" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">constについて</span></h2>



<ul class="wp-block-list"><li><strong><span style="color:#b78d4a" class="has-inline-color">コンパイル時に決定する定数</span></strong></li><li>自動的にでstatic扱い。<br>生成したインスタンスから取得できない。</li><li>宣言時のみ初期化可能</li><li><strong><span style="color:#b78d4a" class="has-inline-color">文字列以外の参照型での初期化はできない。</span></strong><br>（生成したインスタンスは設定不可）</li><li>固定の値を埋め込むため、readonlyより処理速度が速い<br>ただし、ファイルサイズは大きくなる</li><li><strong><span style="color:#b78d4a" class="has-inline-color">デフォルト引数やswitchで使用可能</span></strong></li><li>publicで使用すると<strong><a class="link" href="https://nyanblog2222.com/c-sharp/1299/#const" target="_blank">constのバージョン管理問題</a></strong>があるため、privateでの使用を推奨</li></ul>



<h3 class="wp-block-heading"><span id="toc2">使用例</span></h3>



<pre class="wp-block-code cs"><code>/// &lt;summary>最大数&lt;/summary>
private const int MAX_COUNT = 5;
/// &lt;summary>みかん&lt;/summary>
private const string MIKAN = "みかん";

// 例：for文の条件式で使用
for (int i = 1; i &lt; MAX_COUNT; i++)
{
 // ...処理
}

// switch文の判定で使用
switch (fruits)
{
  case MIKAN:
    return 15;
    break;
  // ...処理
}</code></pre>



<h2 class="wp-block-heading"><span id="toc3">readonlyについて</span></h2>



<ul class="wp-block-list"><li><strong><span style="color:#b78d4a" class="has-inline-color">実行時に決定する</span></strong>読み取り専用変数</li><li><strong><span style="color:#b78d4a" class="has-inline-color">宣言、コンストラクタのどちらかで初期化</span></strong>が可能。<br>（コンストラクタ内で変更も可）</li><li>デフォルト引数やswitchで使用不可</li><li>生成したインスタンスを含め<strong><span style="color:#b78d4a" class="has-inline-color">あらゆる値型や参照型を設定することが可能</span></strong></li><li>constと比べ、ファイルサイズを下げることができるが、処理速度が遅い<br>（どちらも僅かなのでそこまで気にする必要はないと思います。）</li></ul>



<p>readonlyはコンストラクタ内で初期化、変更ができるのが大きな特徴となります。</p>



<h3 class="wp-block-heading"><span id="toc4">使用例</span></h3>



<pre class="wp-block-code cs"><code>class Program
{
    /// &lt;summary>
    /// メイン関数
    /// &lt;/summary>
    /// &lt;param name="args">引数&lt;/param>
    static void Main(string&#91;] args)
    {
        Class1 class1 = new Class1("読み取り専用");

        // コンソール画面に「読み取り専用」と出力
        Console.WriteLine(class1.YOMITORI_SENYOU);
    }
}

class Class1
{
    public readonly string YOMITORI_SENYOU;

    /// &lt;summary>
    /// コンストラクタ
    /// &lt;/summary>
    public Class1(string value)
    {
        YOMITORI_SENYOU = value;
    }
}</code></pre>



<h3 class="wp-block-heading"><span id="toc5">補足</span></h3>



<p>読み取り専用のインスタンス変数という意味では、readonlyを使わず<span style="font-weight: bold; color: rgb(183, 141, 74);" class="has-inline-color">「setアクセサなし」の「getアクセサ」のみのプロパティを作成</span>しても、良いと思います。</p>



<pre class="wp-block-code cs"><code>// 例：setは記述されていないため、読み取り専用になります。
public string Fruits
{
    get { return "みかん"; }
}</code></pre>



<h2 class="wp-block-heading"><span id="toc6">static readonlyについて</span></h2>



<ul class="wp-block-list"><li>constと異なり、<strong><span style="color:#b78d4a" class="has-inline-color">バージョン管理問題が起こらない</span></strong>。</li><li><strong><span style="color:#b78d4a" class="has-inline-color">生成したインスタンス</span></strong>や<strong><span style="color:#b78d4a" class="has-inline-color">コンパイル時に計算できない値</span></strong>でも設定することができます。</li></ul>



<p>他はconstと同様の機能を持っています。</p>



<h3 class="wp-block-heading"><span id="toc7">使用例</span></h3>



<pre class="wp-block-code cs"><code>/// &lt;summary>テーブル一覧&lt;/summary>
public static readonly string&#91;] TABLE_LIST = { "table1", "table2", "table3" };

foreach (string table in TABLE_LIST)
{
    // ..処理
}</code></pre>



<h2 class="wp-block-heading"><span id="toc8">まとめ</span></h2>



<p>いかがでしたでしょうか。</p>



<p>本記事ではconstよりも<strong><span style="color:#b78d4a" class="has-inline-color">static readonly</span></strong>がおすすめさせていただきます。<br>また、読み取り専用のインスタンスとして、<strong><span style="color:#b78d4a" class="has-inline-color">readonly</span></strong>や<strong><span style="color:#b78d4a" class="has-inline-color">getアクセサのみのプロパティ</span></strong>で実行できます。</p>



<p>特にconstとstatic readonlyについては、バージョン管理問題があるため、さまざまな書籍で<strong><span style="color:#b78d4a" class="has-inline-color">static readonly</span></strong>を推奨しています。<br>※ 「実戦で役立つ　C#プログラミングのイディオム／定石＆パターン」etc.</p>



<p>必ずこの記述でないといけない。ということはありませんが、少なくとも<strong><span style="color:#b78d4a" class="has-inline-color">自分やプロジェクトチームではルールを決めて実装することが大事</span></strong>だと思います。</p>



<p>本記事をご覧いただき、ありがとうございました。</p>
<p>投稿 <a href="https://nyanblog2222.com/programming/c-sharp/1279/">【C#】const、readonly、static readonlyの使い方・違いについて</a> は <a href="https://nyanblog2222.com">nyanblog ~にゃんぶろぐ~</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nyanblog2222.com/programming/c-sharp/1279/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
