2011-08-16 5 views
0

クラスには2つの文字列があります。参照時の値を返すクラス

オブジェクトが参照されたときに1つの文字列を返したいと思います。

コードスニペット:

public class ABC 
{ 
    public string A = "first"; 
    public string B = "second"; 
} 

public class useABC 
{ 
    ABC obj; 

    if(obj == "first") 
     Console.writeLine("True"); 
} 

は、私が "真" に印刷するために私ABCクラスで何をすべき。

ありがとうございます。

+0

どのオブジェクトに参照されていますか? 'ABC'、' A'、 'AB'、' useABC'のどれですか?参照することによって、何を意味するのでしょうか? – ja72

答えて

1

暗黙または明示演算子をオーバーライドできます。ここにはMSDN articleがあります。

暗黙のオーバーロードが多すぎると、混乱したり使用しにくいクラスになる可能性があることに注意してください。

0

IEquatable<string>を実装すると、ABC.Equals("first")と書くことができます。

public class ABS : IEquatable<string> 
{ 
    string A, B; 
    public bool Equals(string other) 
    { 
     return A.Equals(other) || B.Equals(other); 
    } 
} 

以降

if(ABC.Equals("first")) { Console.WriteLine("true"); } 

その後も==演算子をオーバーライドすることができますが、それは、クラスタイプにはお勧めできません。 stringと同様に、.Equals()メソッドを使用して同等かどうかを確認することをお勧めします。あるいは、文字列がAまたはBであるかどうかを確認するために、メソッドbool Contains(string other)を追加することもできます。

1

私は、等価演算子(==)をオーバーライドすることを検討していると思います。 これを行う方法は次のとおりです。両方の注文でオペレータに過負荷をかけなければならないことに注意してください。また、コンパイラは!=を同時にオーバーロードする必要があります。

public class ABS 
{ 
    public string A; 
    public string B; 

    public static bool operator ==(ABS obj, string val){return obj.A == val;} 
    public static bool operator !=(ABS obj, string val){return obj.A != val;} 
    public static bool operator ==(string val, ABS obj){return obj.A == val;} 
    public static bool operator !=(string val, ABS obj){return obj.A != val;} 
} 

次のコードでは、両方式にtrueを返します:

ABS abs = new ABS(); 
abs.A = "What?"; 

Assert.IsTrue(abs == "What?"); // true 
Assert.IsTrue("What?" == abs); // true