<?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>struct アーカイブ - nyanblog ~にゃんぶろぐ~</title>
	<atom:link href="https://nyanblog2222.com/tag/struct/feed/" rel="self" type="application/rss+xml" />
	<link>https://nyanblog2222.com/tag/struct/</link>
	<description>ちょっとしたことを調べているよ</description>
	<lastBuildDate>Fri, 27 Aug 2021 11:25:09 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7.1</generator>

<image>
	<url>https://nyanblog2222.com/wp-content/uploads/2021/09/cropped-favicon-32x32.png</url>
	<title>struct アーカイブ - nyanblog ~にゃんぶろぐ~</title>
	<link>https://nyanblog2222.com/tag/struct/</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>
	</channel>
</rss>
