【问题标题】:Is it possible to do this: MyInt.CustomMethod是否可以这样做:MyInt.CustomMethod
【发布时间】:2013-12-02 19:54:26
【问题描述】:

我正在用 C# 制作一个游戏,你有弹药和最大容量。

有没有可能做出这样的某种方法

ammoInt.Maxed;

所以我可以这样使用它:

if (ammoInt.Maxed == true) etc.

检查ammo int 是否等于maxAmmoInt

编辑:

感谢您的意见,但最后一个问题:扩展必须在单独的类中吗?

【问题讨论】:

  • 看看扩展方法
  • 是的,扩展方法需要在一个单独的类中

标签: c# methods int


【解决方案1】:

您可以为int 创建一个Extension method。喜欢:

public static class MyExtensions
{
    public static bool Maxed(this int parameter)
    {
        return parameter > 100;
    }
}

那么你可以这样称呼它:

if(ammoInt.Maxed())

【讨论】:

    【解决方案2】:

    从技术上讲,是的。扩展方法在 .Net 中提供了这一点。但这是糟糕的设计。

    public static class MyExtensions
    {
        public static public bool IsMaxed( this int value )
        {
            return value > 50; // or whatever
        }
    }
    
    int thing = 10;
    bool result = thing.IsMaxed( );
    

    这允许您在任何 int 对象上调用该方法。但就像我说的那样,你可能应该重新考虑它的设计,因为那是一种 hack。

    【讨论】:

    • 为什么说它是hack?而且这个类也必须是静态的,仅供参考
    • 你真的不应该为原始类型添​​加扩展。在这种情况下,查看这个 int 是否处于最大值可能是有意义的。但是这种方法并不真正适用于项目中的所有整数。因此,在他可能正在开发的任何随机点,有一个整数,并看到它有一个 IsMaxed 方法。那里没有上下文。
    • 您应该在答案中指定这一点,因为如果 OP 项目中的所有整数都具有此属性,则这不会是一个 hack。这就是为什么我不得不问 Q...它需要从多个角度看待 :)
    【解决方案3】:

    我认为你有两个选择。

    1) 创建一个具有bool 属性的包装类,检查其值是否大于100

    public class Ammo
    {
        public int Value {get; set;}
        public bool Maxed 
        {
           get
           {
             return Value > 100;
           }
        }
    }
    

    2) 你可以创建一个扩展方法

    public static class CustomExtensions
    {
       public static bool Maxed(this int value)
       {
          return value> 100;
       }
    }
    

    【讨论】:

    • 我什至不会叫它MyAmmoInt,就叫它Ammo。 (此外,它作为一个不可变结构而不是一个可变类可能是有意义的,即使将其作为一个结构(正确地)需要更多的输入。
    • @Servy 我完全同意,更多的是为了证明它实际上是一个简单的包装类。
    • 我的意思是,你不应该把它想象成一个包装器,而是作为“弹药”的表示,它恰好只有一个 int。从概念上讲,它不是一个包装,它只是关于弹药的所有知识。
    猜你喜欢
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    • 2012-02-19
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 2023-01-16
    相关资源
    最近更新 更多