类在被引用时返回一个值

本文关键字:一个 返回 引用 | 更新日期: 2023-09-27 18:05:51

我有一个类,其中有两个字符串。

当对象被引用时,我想返回一个字符串。

代码片段:

public class ABC
{
    public string A = "first";
    public string B = "second";
}
public class useABC
{
    ABC obj;
    if(obj == "first")
         Console.writeLine("True");
}

我应该在我的ABC类中做什么来打印"True"

类在被引用时返回一个值

可以覆盖隐式或显式操作符。这是MSDN的一篇文章。

注意,太多的隐式重载会导致一个令人困惑或难以使用的类

我认为您正在寻找覆盖相等操作符(==)。如何做到这一点:记住,您必须以两种顺序重载操作符。此外,编译器还要求您同时重载!=

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

如何实现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)方法来检查string是否在AB中。