将类用作布尔值时的自定义函数
本文关键字:自定义函数 布尔值 | 更新日期: 2023-09-27 17:53:24
有没有什么办法让我可以这样写
if(boolClass) {}
其中boolClass正在调用包含的函数。有点像重载bool操作符之类的
谢谢你的帮助
实际上有一个'true'操作符可以用于此目的,尽管它有点晦涩。这比转换为bool稍微具体一些,因为它仅限于在检查true/false的表达式中使用。
public class BoolClass
{
public static bool operator true(BoolClass instance)
{
return true; //Logic goes here
}
public static bool operator false(BoolClass instance)
{
return true; //Logic goes here
}
public void Test()
{
BoolClass boolClass = new BoolClass();
if (boolClass)
{
//Do something here
}
}
}
注意,MS实际上不建议使用此操作符,因为它最初的目的是允许一种可空bool类型(其中值既不能为真也不能为假)。由于现在本机支持可空的bool,因此它们是首选。我不建议在产品代码中使用它,主要是因为大多数开发人员不熟悉语法,导致混乱。
我的第一点是要提醒您不要这样做,通常您希望直接或间接使用bool
或bool?
类。
如果您确定这是您需要的,那么您将需要一个隐式转换操作符到bool
//In the definition of boolClass
public static implicit operator bool(boolClass obj)
{
//Return a bool in this method
}
可以使用隐式操作符将类转换为布尔值。
这是一个完整而简单的例子:
架势
using System;
namespace TestLogic
{
internal class FuzzyLogic
{
public FuzzyLogic(Double init)
{
this.value = init;
}
public Double value { get; private set; }
public static implicit operator Boolean(FuzzyLogic logic)
{
return logic.value < 0.1;
}
}
}
使用转换
using System;
namespace TestLogic
{
internal class Program
{
private static void Main(string[] args)
{
FuzzyLogic logic = new FuzzyLogic(0.2);
if (logic)
{
Console.WriteLine("It's true !");
}
else
{
Console.WriteLine("It's not true !");
}
Console.ReadLine();
}
}
}
听起来像一个属性:
public bool boolClass
{
get { return false; } // or a calculated boolean value
}
你可以在同一个类中调用它:
if(boolClass) {}
为您的类添加一个转换操作符。示例(ideone):
using System;
public class A
{
private int i;
public int I { get { return i; } }
public A(int i) { this.i = i; }
public static implicit operator bool(A a) { return a.i != 0; }
}
public class Test
{
public static void Main()
{
A a1 = new A(0);
if (a1)
Console.WriteLine("a1 is true");
else
Console.WriteLine("a1 is false");
A a2 = new A(42);
if (a2)
Console.WriteLine("a2 is true");
else
Console.WriteLine("a2 is false");
}
}
输出:a1 is false
a2 is true