1. ホーム
  2. c#

[解決済み] C#の「const correctness」(コンスタント・コレクトネス)

2023-07-06 23:51:32

質問

const-correctness のポイントは、ユーザが変更したり削除したりできないインスタンスのビューを提供できるようにすることです。コンパイラは、const関数内からconstを破ったとき、またはconstオブジェクトの非const関数を使用しようとしたときに指摘することによって、これをサポートしています。そこで、constのアプローチをコピーすることなく、C#で使用できる、同じ目的を持った方法論はないでしょうか?

私は不変性を認識していますが、それは一例を挙げると、コンテナオブジェクトに本当に引き継がれるわけではありません。

どのように解決するのですか?

私もこの問題に何度も遭遇し、結局はインターフェースを使うことになりました。

C#がC++の何らかの形である、あるいは進化したものであるという考えを捨てることが重要だと思います。この2つは、ほとんど同じ構文を共有する2つの異なる言語なのです。

私は通常、クラスの読み取り専用ビューを定義することによって、C#の「const correctness」を表現します。

public interface IReadOnlyCustomer
{
    String Name { get; }
    int Age { get; }
}

public class Customer : IReadOnlyCustomer
{
    private string m_name;
    private int m_age;

    public string Name
    {
        get { return m_name; }
        set { m_name = value; }
    }

    public int Age
    {
        get { return m_age; }
        set { m_age = value; }
    }
}