【问题标题】:I want to create instance of a class not constructor in c#我想在 C# 中创建一个类的实例而不是构造函数
【发布时间】:2017-11-01 12:01:42
【问题描述】:

我需要调用 ControlledTank 类的实例来访问 GetPlayer 方法,稍后我将完成该方法。但是,当我尝试创建一个实例时,它使用的是构造函数而不是类。

public class ControlledTank
{
    private float Tangle;
    public ControlledTank(Player player, int tankX, int tankY, Game game)
    {
        Tangle = 0;
        //throw new NotImplementedException();
    }

    public Player GetPlayer()
    {

        throw new NotImplementedException();
    }
}

我也没有要解析到构造函数中的值,所以我只会出错。

【问题讨论】:

  • 添加空构造函数?将GetPlayer 设为静态?
  • 尝试使用空参数创建构造函数。像这样 public ControlledTank() { }
  • "it's using the constructor not the class" - 这是什么意思?你期望会发生什么? 为什么?构造函数用于构造类的实例。您的构造函数需要参数。您没有提供这些参数。因此出现错误。
  • 当您没有所需的信息时,您希望如何创建一个类的实例?那就是您不调用构造函数并提供参数。当调用构造函数时——这是你必须做的以创建一个实例——需要一些你拥有的参数来提供这些参数,除非有另一个无参数的构造函数。
  • 通过反复试验学习编程是没有办法的。构造函数和构造函数重载是您在几乎任何语言(支持它)的一开始就学习的东西,被认为是基础/基础知识。拿起一本书或遵循一些教程,但不要试图通过反复试验来学习基础知识,这只会让您和其他所有相关人员感到沮丧。

标签: c# visual-studio class constructor instance


【解决方案1】:

您的构造函数需要 4 个参数:

public ControlledTank(Player player, int tankX, int tankY, Game game)
{
    //...
}

你传递了 0 个参数:

new ControlledTank()

因此错误。所以你有两个选择。要么传递构造函数所需的参数,要么添加带有所需参数(或缺少参数)的构造函数。例如:

public ControlledTank()
{
    Tangle = 0;
}

注意:一个类可以有多个构造函数。一个类也可以有一个 default 构造函数,它有 0 个参数(并且没有内部逻辑),但 只有 如果没有指定其他构造函数。

【讨论】:

    【解决方案2】:

    错误就在你面前,你不能不向必须有参数的构造函数传递任何参数。这是你的选择,你可以根据你面前的任务来决定你想要什么:

    添加默认构造函数:

    public ControlledTank(){}
    

    或者将你的构造函数参数设为默认值:

    public ControlledTank(Player player = null, int tankX = 0, int tankY = 0, Game game = null){}
    

    “它使用的是构造函数而不是类” 没有意义。如果你想在访问类时通过在类名后面加上. 操作符来调用构造函数,你需要有静态构造函数(它们总是无参数的):

    static ControlledTank() {}
    

    但它很有用,当您想在其中初始化一些静态字段时。

    【讨论】:

    • 添加无参数构造函数可能不是一个好建议。在已经存在的构造函数中传递的一些参数可能是强制性的(我猜想 ControlledTank 不能在游戏之外创建,因此在不将游戏传递给它的情况下创建一个可能不是处理这种情况的正确方法) .
    • 我明白,我只是想给他一个想法,他有什么选择,所以他可以根据他的任务,使他的代码工作。
    【解决方案3】:

    构造函数需要参数来构造类,而你没有提供参数。

    要解决这个问题,你只需要一个空的默认构造函数:

    public ControlledTank(){}
    

    【讨论】:

      【解决方案4】:

      如果你需要像这样使用它,你也需要编写一个空的构造函数。构造函数用于构建类的实例:

      public ControlledTank()
      {
          Tangle = 0;
          player = new Player();
          tankX = 0;
          tankY = 0;
          game = new Game();
      }
      

      【讨论】:

        猜你喜欢
        • 2020-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-06
        • 1970-01-01
        • 2018-07-18
        • 1970-01-01
        相关资源
        最近更新 更多