gpt4 book ai didi

c# - "I"运算符,非整数和非 bool 类型除外

转载 作者:太空宇宙 更新时间:2023-11-03 23:31:49 25 4
gpt4 key购买 nike

我想了解在哪里使用 | 运算符。在 msdn据说

Binary | operators are predefined for the integral types and bool.

User-defined types can overload the | operator

所以,当我看到类似的东西时: BindingFlags.CreateInstance | BindingFlags.ExactBinding

 NotifyFilters.Attributes | NotifyFilters.FileName | NotifyFilters.LastAccess

我假设这是重载的 | 运算符,逻辑将类似于:某物或其他东西等等。但是我如何指示运算符 | 是为某些定义的类(class)?

最佳答案

不,这些是在内部表示为 intenum。 (您可以毫无问题地将这些 enum 转换为 int,反之亦然。)这样的 ints/enums 被称为标志。在 C 等其他语言中,没有额外的 enum 类型,因此它们只是普通的 int 或其他整数类型。

所以你的第一个引述中仍然是这样:

Binary | operators are predefined for the integral types and bool.

你的另一个问题

But how can I indicate that operator | is defined for some class?

运算符使用 operator 关键字重载。注意:并非每个运算符都是可重载的,请参阅 here .

// example addition operator from a complex number class
public static Complex operator +(Complex c1, Complex c2)
{
Return new Complex(c1.real + c2.real, c1.imaginary + c2.imaginary);
}

您可以使用 Reflection在运行时确定一个类是否实现了某个运算符。在内部,运算符只是方法。例如,== 运算符是在 op_Equality 方法中实现的。因此,如果存在这样的方法,则 == 运算符可用。 (你只能看到那些带有反射的方法,它们在普通的 C# 代码中是不可调用的)。 See GetMethod() 来自 Reflection API 如何确定运算符的存在。

+ 运算符的代码示例

MethodInfo operator = typeof(YourClass).GetMethod("op_Addition");

if (operator != null) // if null the operator is not implemented
operator.Invoke(null, firstInstance, secondInstance);

我不知道 | 运算符的方法名称是什么,但您可以使用反编译工具轻松检查它。它应该类似于 op_BinaryOr

如果您只想知道是否可以在代码中使用运算符,这应该由您的 IDE 提供,例如 Visual Studio 在 IntelliSense 自动完成列表或对象浏览器中显示运算符。

关于c# - "I"运算符,非整数和非 bool 类型除外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31920513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com