2011-08-16 44 views
0

我有一個包含兩個字符串的類。當它被引用時返回一個值的類

我想在引用對象時返回一個字符串。

代碼片段:

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

public class useABC 
{ 
    ABC obj; 

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

我應該在我的ABC類做打印 「真」。

在此先感謝。

+0

哪個對象是refered什麼? '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()方法檢查是否相等。或者,您可以添加一個方法bool Contains(string other)來檢查字符串是否在AB

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 
相關問題