문제

의 포인트 상수 정확성할 수 있을 것입하의 전망을 제공합 인스턴스할 수 없는 변경하거나 사용자에 의해 삭제됩.컴파일러 지원하여 이를 가리키는 때 당신은 휴식 constness 내에서 const 기능 또는 사용하려고 비 const 의 기능 const 개체입니다.그래서를 복사하지 않고 const 접근 방식이 있습 방법론에서 사용할 수 있습 C#같은 끝까?

제가 알기로는 불변성,그러나 실제로는 그렇지 않을 수행을 통해 컨테이너체 이름 그러나 하나의 예입니다.

도움이 되었습니까?

해결책

가 이 문제는 많은 시간이 너무 그리고 끝났을 사용하여 인터페이스가 있습니다.

내가하는 것이 중요하다는 것을 생각한 아이디어를 드롭 C#은 어떤 형태 또는 심지어 진화의 C++.그들은 두 개의 서로 다른 언어를 공유하는 거의 동일한 구문입니다.

나는 보통 익스프레스'const 정확성'에서는 C#정의하여 읽기 전기의 종류:

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; }
    }
}

다른 팁

하의 혜택을 얻을 const-발광(또는 플라 프로그래밍 측면),를 디자인해야 합니의 클래스에서는 방법은 그래서 그들은 변경할 수 없는 것처럼,String 클래스의 c#입니다.

이 방법보다 더 나은 방법을 표시하는 개체를 읽기 전용으로,이후로 변경할 수 없는 클래스는 전달할 수 있습니다 데이터를 주변에서 쉽게 멀티태스킹 환경입니다.

I just wanted to 참고 당신을 위해 많은 시스템입니다.컬렉션이 있습니다.Generics 컨테이너가 AsReadOnly 방법을 줄 것이다 당신은 다시 불변의 컬렉션입니다.

C#지 않은 기능입니다.전달할 수 있습니다수에 의해 값이나 참조에 의해.참조 자체는 변경할 수 없을 지정하지 않으면 ref 수정자.하지만 참조하는 데이터 없 변경할 수 없습니다.그래서 당신은 신중해야를 피하고 싶은 경우 부작용이 있습니다.

MSDN:

전달하는 매개변수

인터페이스가 대답은 실제보다 더 강력한"const"C++.const one-size-fits-all solution 문제는"const"정의로"설정하지 않는 회원 또는 전화로 무언가를 설정하는 회원".는 속기 const-에서 많은 시나리오,하지만 그들 모두.예를 들어,고려한 기능을 계산하는 값에 따라 일부 회원들 또한 캐시 결과입니다.에서는 C++,는 것으로 간주됩-const 지만,사용자의 관점에서 그것은 본질적으로 불가능합니다.

인터페이스 당신에게 더 많은 유연성을 제공에서 정의하의 특정 하위 집합 기능을 제공하려면에서 당신의 클래스입니다.원 const-?막 인터페이스를 제공합 없이 변화시키는 방법이 있습니다.을 허용하려는 일부를 설정하는 것 아니지만 다른 사람?인터페이스 제공으로 그 방법이 있습니다.

에 동의 다른 사람의 일부 모습에서 사용 읽기 전용는 필드에서 초기화를 생성자를 만들기를 변경할 수 없다.

    public class Customer
    {
    private readonly string m_name;
    private readonly int m_age;

    public Customer(string name, int age)
    {
        m_name = name;
        m_age = age;
    }

    public string Name
    {
        get { return m_name; }
    }

    public int Age
    {
        get { return m_age; }
    }
  }

또한 추가할 수도 있습니다 액세스 범위에는 특성,즉공공 얻을 보호합니다.

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

    protected Customer() 
    {}

    public Customer(string name, int age)
    {
        m_name = name;
        m_age = age;
    }

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

    public int Age
    {
        get { return m_age; }
        protected set { m_age = value; }
    }
  }
  • const 키워드를 사용할 수 있를 위한 컴파일 시간 상수 같은 기본 형식 문자열
  • readonly 키워드를 사용할 수 있에 대한 실시간 상수와 같이 참조하 유형

의 문제 readonly 은 그것이만 허용 기준()를 포함하는 것을 일정하다.일 참조(지적)수정 가능합니다.이는 까다로운 부분이지만 주위에 방법이 없습니다.구현 일정한 객체를 만드는 것을 의미하지 않은 무엇이든 변경 가능한 방법 또는 속성 하지만 이것이 어색하다.

또한 참조 효과적인 C#:50 특정을 개선하는 방법 당신의 C# (항목 2-아보세요 readonly const.)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top