类在被引用时返回一个值
本文关键字:一个 返回 引用 | 更新日期: 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是否在A
或B
中。