文字列を受け取って返すライブラリがあります(無限の数値を作成したいが、説明を簡略化しています)。オブジェクト型を値でオーバーライドする
私は演算子のオーバーロードと複数のソースと私のライブラリを持っているが、私はライブラリを使用する場合:
MyType foo = new MyType("10");
MyType bar = foo + foo;
Console.WriteLine("{0}", bar.GetType());
Console.WriteLine("{0}", bar);
Console.WriteLine("{0}", bar.Value); // Redundant: the property "Value" has the value as string
出力は次のとおりです(
まあMyNamespace.MyType
MyNamespace.MyType // The object "bar" returns the object type
10
が、私は「10」を取得したいですbar.Value)のみオブジェクト名を使用して「バー」:
Console.WriteLine("{0}", bar);
// I want the next output: 10
は私がメソッドGetType変化を()やってみましたライブラリ(私はそれが可能オーバーライドメソッドGetType(ではないのです見つかっ)):
public new string GetType()
{
return this.Value;
}
しかし、これは唯一の「バー」と「bar.GetType()」と連携し、ではありません。
C#ではこれはできないと思います。
class MyType
{
public string Value { get; set; }
public override string ToString() { return this.Value; }
}
試験:
MyType m = new MyType("10");
Console.WriteLine(m);
プリント10
これはtoString()をオーバーライドして動作しますが、ソースではtoString()を使用し、オーバーライドされていないデフォルトの動作です。それはgeatですが、なぜ私はそれをオーバーライドする場合は、ソース内の動作を変更しないでください? – Joe