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

【入門級】不変のクラス、一部不変のクラス、可変のクラスを使い分ける

Written By: 川俣 晶連絡先

 C#には、(厳密には.NETには)、変更できるオブジェクトと変更できないオブジェクトと一部だけ変更できるオブジェクトがあります。変更できないオブジェクトは【不変のクラス】と分類されるクラスから作成されます。

 たとえば文字列は典型的な変更できないオブジェクトです。文字列型の変数は書き換えられますが、オブジェクトそのものは書き換えられません。たとえば文字列の中の1文字だけ書き換えることはできません。

 可変のオブジェクトの典型例はコレクションのListクラスです。要素数も要素の値も変更できます。

 しかし、一部だけ変更できるオブジェクトもあります。配列は要素の値は変更できますが要素の数は変更できません。それでは不便かと言えばそうでもありません。サイズを変えたければListクラスなどを最初から使ってしまえば良いからです。配列をList型に変更するのはToListメソッドですぐできます。

罠の数々 §

  • オブジェクトが不変であっても、変数はいくらでも書き換えられることに注意しよう
  • 変数も不変にしたい? それは定数という構文が別に存在する

参考リンク §

メンバー アクセス演算子と式 (C# リファレンス)

List<T> クラス

String クラス

Array クラス

 実は配列はArray クラスを経由して実現している。配列の機能を知りたければ、Array クラスを参照だ! しかも、Array クラスを直接使うといろいろ豊富な機能も知ることができる。上記のリンクから確かめてみよう。

リポジトリ §

https://github.com/autumn009/cshowto

Immutable §

using System;

using System.Collections.Generic;

class Program

{

    static void Main()

    {

        // 不変のオブジェクトの例

        var s1 = "hello!";

        // ↓書けない

        //s1[1] = 'H';

        Console.WriteLine(s1);

        // 可変のオブジェクトの例

        var list = new List<int>();

        list.Add(123);

        foreach (var item in list) Console.Write($"{item} ");

        Console.WriteLine();

        list[0] = 456;

        list.Add(789);

        foreach (var item in list) Console.Write($"{item} ");

        Console.WriteLine();

        // 一部可変のオブジェクトの例

        int[] array = { 123 };

        foreach (var item in array) Console.Write($"{item} ");

        Console.WriteLine();

        array[0] = 456;

        // ↓書けない

        //array.Add(789);

        foreach (var item in array) Console.Write($"{item} ");

        Console.WriteLine();

    }

}

実行結果 (実行する環境で変化する)

hello!

123

456 789

123

456

Facebook

COOL C# CREW

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

C#ハウツー: 逆引き入門・こんな機能はどう書くの?
キーワード【 川俣晶の縁側ソフトウェアC# コーディング How To
【C# コーディング How To】の次のコンテンツ
2020年
11月
13日
【入門級】整数計算だけで1.2倍を計算する
3days 0 count
total 1167 count
【C# コーディング How To】の前のコンテンツ
2020年
11月
11日
【入門級】C#9の目玉recordを使ってみる
3days 0 count
total 1086 count

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

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

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

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

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

https://mag.autumn.org/tb.aspx/20201112093249
サイトの表紙【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.