質問
これの疑わしい有用性とは別に、これらの線に沿って何かをすることが可能かどうかを尋ねたいと思います。
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; }
}
また、悪い習慣。
所属していません StackOverflow