【问题标题】:Is it possible create extended boolean? [closed]是否可以创建扩展布尔值? [关闭]
【发布时间】:2013-11-24 23:56:37
【问题描述】:

所以基本上我想创建一个扩展的布尔值。基础有 Equals、CompareTo 函数,但我想创建一个 bool 类型,它有一些其他函数、方法...

例如:

extbool eb = true;

var pos = eb.position

eb.get...()

有没有可能在 C# 中做到这一点?

【问题讨论】:

  • 这没有多大意义。布尔值的方法非常完整!使用 Boolean 的全部原因是它只有 2 个值(如果是可为空的布尔值,则为 3 个)!
  • 不清楚您在创建此类新的类/结构或扩展方法时遇到了什么问题。请说明预期用途并展示您现有的尝试..
  • 为了帮助您获得更好的答案,这个问题背后的动机是什么?你为什么要这样做?也有用,.position.get()的返回类型是什么?
  • C# 有一种叫做扩展方法的东西,可以在不重新实现的情况下进行扩展,我认为这应该对你想要做的事情有好处。
  • 你真的想问 - “如何为类似于 Control.MouseClick 的东西实现类似 MouseEventArgs 的东西”,而不是你奇怪的“扩展布尔”问题?

标签: c#


【解决方案1】:

您可以定义自己的类并将隐式强制转换运算符覆盖为布尔值:

public static implicit operator extbool  (bool instance)
   {
        //implicit cast logic
        return extbool ;
   }

现在你可以轻松做到:

extbool a = true;

反之:

public static implicit operator bool (extbool  instance)
   {
        //implicit cast logic
        return extbool ;
   }

这应该让您也可以进行比较,也可以转换为布尔值。 这是一篇很好的文章,解释了一切

http://www.codeproject.com/Articles/93160/Operator-Overloading-with-Implicit-and-Explicit-Ca

【讨论】:

    【解决方案2】:

    我不太确定布尔类型的其他方法的用途,但您可以使用extension methods

    示例(将返回类型更改为您需要的任何内容):

    public static class BoolExtensions
    {
        public static int Position(this bool val)
        {
            return 2;
        }
    }
    

    叫它:

    bool foo = false;
    int position = foo.Position();
    

    【讨论】:

    • 就是这样,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    • 2015-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多