在引用时返回值的类

时间:2011-08-16 19:14:43

标签: c#

我有一个包含两个字符串的类。

我希望在引用对象时返回一个字符串。

代码段:

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

public class useABC
{
    ABC obj;

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

我应该在ABC课程中做什么才能打印“True”。

提前致谢。

3 个答案:

答案 0 :(得分:1)

您可以覆盖隐式或显式运算符。这是一个MSDN article

请注意,过多的隐式重载可能导致令人困惑或难以使用的类。

答案 1 :(得分: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

答案 2 :(得分: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