【问题标题】:methods outside of constructor in c# [closed]c#中构造函数之外的方法[关闭]
【发布时间】:2016-09-27 17:06:27
【问题描述】:

我正在编写一些学习材料,但遇到了一些我不理解的代码。

class Program
{
    static void Main(string[] args)
    {
        var warrior = new Samurai();
        warrior.Attack("the evildoers");
        Console.ReadLine();
    }

    class Sword
    {
        public void Hit(string target)
        {
            Console.WriteLine("Chopped {0} clean in half", target);
        }
    }

    class Samurai
    {
        readonly Sword sword;
        public Samurai()
        {
            this.sword = new Sword();
        }

        public void Attack(string target)
        {
            this.sword.Hit(target);
        }
    }
}

就我而言,当我实例化 Samurai 时,我运行了 public Samurai() 方法。如果 Attack 方法在构造函数 public Samurai() 之外,如何调用方法 warrior.Attack

【问题讨论】:

  • public Samurai()Samurai 类的构造函数,而不是方法。 Attack() 方法已经在构造函数之外,因此我对你真正想知道的内容感到困惑。
  • 并在上面的注释中添加您正在通过 Samurai 类的对象调用 Attack 方法
  • 我不清楚你在问什么。你不明白warrior.Attack("the evildoers");为什么会调用SamuraiAttack方法,还是不明白这个过程是怎么做的?
  • 我必须说@d1du 你应该阅读 OOP 基本概念
  • public Samurai()Samurai 类的构造函数,public void Attack 在该类中。因此,您可以在通过new Samurai() 创建的Samurai 实例上调用Attack

标签: c# class object methods constructor


【解决方案1】:

Samurai类的构造函数其实是

public Samurai()
{
    this.sword = new Sword();
}

这意味着当你在下面写这段代码时:

var warrior = new Samurai();

您创建一个 Samurai 类的新实例,并执行 Samurai 类构造函数中的代码。即为这个武士创建了一个剑的实例(this.sword = new Sword())。

Sword 类不包含构造函数,因此当 Samurai 构造函数创建 Sword 实例时,不会调用 Sword 类中的任何其他内容。

new Samurai();

是创建 Samurai 类实例的方式。

通过使用

var warrior = new Samurai();

您正在创建 Samurai 类的一个实例,并且还声明了一个名为“warrior”的变量,这将是您对这个新创建的实例的引用。

所以每当你想调用这个新创建的实例的“攻击”方法时,你都可以使用你的代码:

warrior.Attack("the evildoers");

【讨论】:

  • 感谢您的澄清!
猜你喜欢
  • 1970-01-01
  • 2012-11-10
  • 2013-08-26
  • 1970-01-01
  • 2010-10-12
  • 2013-08-09
  • 1970-01-01
  • 2013-05-21
  • 2023-04-02
相关资源
最近更新 更多