【问题标题】:Constructor in C# OOP [closed]C# OOP 中的构造函数
【发布时间】:2020-12-30 15:06:33
【问题描述】:

这个类的构造器应该生成一个关于被随机选择的人的随机提示,并将提示存储在它的随机提示属性中。看来我的两个构造函数都有问题,但我不知道如何解决这个问题或问题是什么。请问有什么想法吗?

 class RandomHintGame : Game
    {
        string randomHint;
        static Random r = new Random();

        // Constructor 1
        public RandomHintGame(string randomHint, Person person) : base(person)
        {
            this.randomHint = randomHint;
        }
        
        // Constructor 2
        public RandomHintGame(Person person) : this(person)
        {
            int randomNumber = r.Next(0, 3);

            switch (randomNumber)
            {
                case 0: randomHint = $"The person {HasHat} a hat."; break;
                case 1: randomHint = $"The person has {EyeColor} eyes."; break;
                case 2: randomHint = $"The person is a {Gender}"; break;
            }
        }
    }

【问题讨论】:

  • 请编辑您的问题以更具体地说明您遇到的问题。是否有某种错误信息?还是它正在运行但未按预期运行?
  • public RandomHintGame(Person person) : this(person) 肯定是错误的,因为这个类只有一个参数构造函数,而且是同一个,所以这就是无限递归。
  • 我需要修复两个构造函数,因为代码错误。我不知道要使用什么参数,这就是我要问的
  • @Student:恐怕“我不懂 C#”不是一个非常具体的问题。我们在这里不提供定制辅导服务。如果您尝试解决的问题是您不熟悉该语言并且需要学习,那么我们鼓励您查找教程、示例、书籍、课程等来学习。实践是好事。如果您遇到特定问题(例如错误或意外结果),我们可以提供帮助。
  • @Student:要了解有关此社区的更多信息以及我们如何为您提供帮助,我们鼓励您从tour 开始并阅读How to Ask 及其链接资源。如果您发现代码存在特定问题,请更新问题以提供有关该问题的信息。

标签: c# oop constructor


【解决方案1】:
int randomNumber = r.Next(0, 3);

将返回 0,1,2 见link

你的开关是 1,2,3

而构造函数 2 的基础不是这个

// Constructor 2
 public RandomHintGame(Person person) : base(person)

【讨论】:

  • 哦,是的,这是一个错误,对不起,我会修复它
  • 感谢您的帮助。我不明白的是如何将提示传递给构造函数
  • 你想用选定的提示从构造函数 2 调用构造函数 1?
  • 在这种情况下,您不需要调用第一个构造函数。只需要在第二个构造函数中将其更改为 base
  • 第一个构造函数将创建一个具有给定随机提示的对象并将人员传递给基础构造函数,第二个构造函数将创建一个对象并选择随机随机命中并将人员传递给基础构造函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-23
  • 2012-05-09
  • 2017-04-27
  • 1970-01-01
  • 2016-03-30
  • 2021-05-02
相关资源
最近更新 更多