문제

이것의 의심스러운 유용성 외에도, 나는이 선을 따라 무언가를 할 수 있는지 묻고 싶습니다.

class MyPrimitive {
        String value;
        public String Value {
            get { return value; }
            set { this.value = value; }
        }
}

// Instead of doing this...
MyPrimitive a = new MyPrimitive();
a.Value = "test";
String b = a.Value;

// Isn't there a way to do something like this?
MyPrimitive a = "test";
String b = a;

나는 속성을 사용하여 원시 유형을 사용자 정의 클래스로 래핑하는 것을 좋아합니다. get 그리고 set 방법 검증과 같은 다른 것들을 수행합니다.
나는 이것을 자주하고 있기 때문에 표준 프리미티브와 같이 더 간단한 구문을 갖는 것이 좋을 것이라고 생각했습니다.
그럼에도 불구하고, 나는 이것이 실현 가능하지 않을뿐만 아니라 개념적으로 잘못 될 수 있다고 생각합니다. 모든 통찰력은 가장 환영합니다. 감사합니다.

도움이 되었습니까?

해결책

값 유형을 사용합니다 (struct) 그리고 그것을 줘 암시 적 변환 연산자 과제 오른쪽에 원하는 유형에서.

struct MyPrimitive
{
    private readonly string value;

    public MyPrimitive(string value)
    {
        this.value = value;
    }

    public string Value { get { return value; } }

    public static implicit operator MyPrimitive(string s)
    {
        return new MyPrimitive(s);
    } 

    public static implicit operator string(MyPrimitive p)
    {
        return p.Value;
    }
}

편집 : Marc Gravell이 절대적으로 옳기 때문에 구조물을 불변으로 만들었습니다.

다른 팁

당신은 사용할 수 있습니다 암시 적 주조. 권장되지는 않지만 :

public static implicit operator string(MyString a) {
    return a.Value;
}
public static implicit operator MyString(string a) {
    return new MyString { value = a; }
}

다시, 나쁜 연습.

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