【问题标题】:How to call a method without first calling it's constructor in C#如何在不先调用 C# 中的构造函数的情况下调用方法
【发布时间】:2013-08-11 02:31:26
【问题描述】:

我希望我可以在不上传代码的情况下完成这项工作。我在 VS 2012 中有一个 Draw Poker 控制台应用程序,其中包含大约 5 个面向对象的类。是的,这是家庭作业,但我是一名经验丰富的开发人员,正在学习 C#。

我的目标是在每手牌后补充牌库,以便玩家可以从 52 张牌中抽牌,并且每次抽牌 1 分时可能会损失 100 分。如果牌组在几次抽牌后耗尽,这是不可能的,这种情况正在发生。

问题:我被告知要调用 CreateDeck 方法,但如果不调用构造函数,我不知道该怎么做。然而,如果我这样做了,一个新的 Deck 对象会被实例化但不会被引用;原始牌组在每次抽签中都会被引用并迅速耗尽。

相关的问题是每次抽牌会执行多个 DealHands,从而增加牌组耗尽的速度。

由于这个系统是数百行代码,分散在五个类中,我不知道如何包含我的代码。虽然我可以,显然包括方法调用,但我被告知构造函数不会自行工作。不知道老师的意思。

我可以将压缩系统通过电子邮件发送给感兴趣的一方。

谢谢。

【问题讨论】:

  • 通过电子邮件将 zip 发送给感兴趣的各方并不是一种有用的机制,因为任何阅读此问题和任何答案的人都无法看到它。你能把你的问题提炼成一个简单的例子,然后发布代码吗?
  • 贴出构造函数代码和CreateMethod()?
  • 我的猜测是,基于明显不完整的信息,建议是将CreateDeck() 方法设为静态。静态方法附加到类型,而不是类型的任何特定实例。这意味着您可以从任何地方调用Deck.CreateDeck(),而无需创建实例。这里没有足够的信息来确定这是否是您要查找的内容。
  • 使用Pastebin 向感兴趣的人展示您的代码。
  • 即使是 pastebin 也不理想。为了让这个问题对将来阅读 stackoverflow 的人有用,这个问题应该包括所有需要的上下文,没有外部依赖。

标签: c# oop


【解决方案1】:

每次开始新游戏时创建一个新牌组:

Deck deck = new Deck();
...
Card card = deck.NextCard();

在 Deck 的构造函数中,有代码设置一个新的 52 张洗牌的牌组。

public class Deck
{
    public Deck ()
    {
        // Create List/Array of shuffled cards here
    }
}

如果你真的想把它作为一个静态方法添加一个 Shuffle() 方法到 Deck

public static void Shuffle()
{
    // Shuffle cards here
}

然后调用

Deck.Shuffle() 

请注意,您是在 class 上调用 Shuffle,而不是在第一个示例中的甲板实例上。在这种情况下,您的卡片列表/数组也必须是静态的。

【讨论】:

  • 我很确定 OP 正在寻找涉及 static 的答案,因为问题指出在没有先调用其构造函数的情况下调用方法;不是说您的答案是错误的,而是说它确实没有解决 OP 的预期问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-07
  • 1970-01-01
相关资源
最近更新 更多