我正在研究一些学习资料,并且遇到了一些我不理解的代码。
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()
。如果warrior.Attack
方法在构造函数Attack
之外,方法public Samurai()
如何调用?
答案 0 :(得分:2)
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"的变量,它将是您对这个新创建的实例的引用。
所以每当你想打电话给#34;攻击"这个新创建的实例的方法,您可以使用您的代码:
warrior.Attack("the evildoers");