2016-04-15 6 views
1

文字列を受け取って返すライブラリがあります(無限の数値を作成したいが、説明を簡略化しています)。オブジェクト型を値でオーバーライドする

私は演算子のオーバーロードと複数のソースと私のライブラリを持っているが、私はライブラリを使用する場合:

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

答えて

3

これは容易Object.ToString()をオーバーライドすることによって行うことができます。

Explanataion:WriteLineを呼び出すときは、クラス 'ToString -methodが呼び出されます。このメソッドが型内でオーバーライドされていない場合は、objectのdefault-implementationが使用されます。この場合、単にクラスの型が返されます(MyNamespace.MyType)。

+0

これはtoString()をオーバーライドして動作しますが、ソースではtoString()を使用し、オーバーライドされていないデフォルトの動作です。それはgeatですが、なぜ私はそれをオーバーライドする場合は、ソース内の動作を変更しないでください? – Joe

関連する問題