Объект Asses создан из статического метода - PullRequest
0 голосов
/ 26 февраля 2019

В настоящее время я пытаюсь использовать объект, созданный статическим методом, но этого не происходит.Я верю, что делаю что-то не так, но не знаю что.Вот мой код, который я использую для создания объекта, этот код находится в отдельном классе, скажем, его имя CrusadersFactory.cs:

//Method for creating crusader Nate
public static void CreateNate(string name, int level, int health, int damage)
{
    Nate NateDragon = new Nate(name, level, health, damage);
    //Print the info for the new object NateDragon
    Console.WriteLine(NateDragon.name + " " + NateDragon.level + " "  + NateDragon.health + " " + NateDragon.damage);
}

А вот как я пытаюсь использовать объект, этот коднаходится в Program.cs:

CrusadersFactory.CreateNate("Nate", 100, 200, 300); //This works in order to create Nate, but It gives error if i try Console.WriteLin(CrusadersFactory.NateDragon.name)
Console.WriteLine("Nate's health is {0}", CrusadersFactory.NateDragon.health);

Заранее спасибо за ваши ответы!

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Ваш метод имеет тип возврата void (значение не возвращается).Вы должны изменить это, чтобы возвращать тип Nate.

public static Nate CreateNate(string name, int level, int health, int damage)
{
    var nate = new Nate(name, level, health, damage);
    //Print the info for the new object NateDragon
    Console.WriteLine(nate.name + " " + nate.level + " "  +  nate.health + " " + nate.damage);
    return nate;
}

Ваш пример использования может тогда стать:

var nate = CrusadersFactory.CreateNate("Nate", 100, 200, 300);
Console.WriteLine("Nate's health is {0}", nate.health);
0 голосов
/ 26 февраля 2019

Поскольку вы можете вызывать это без ошибки компилятора:

CrusadersFactory.NateDragon.health

Это означает, что вы действительно создали статическое NateDragon свойство в вашем CrusadersFactory.Однако, вы никогда ничего не назначали этому свойству .

public static void CreateNate(string name, int level, int health, int damage)
{
    Nate NateDragon = new Nate(name, level, health, damage);
}

То, что вы сделали здесь, объявляется и присваивается локальная переменная .Эта переменная существует только в области действия метода CreateNate, она не существует вне его.

Вместо этого вам следует назначить статический параметр, в котором вы хотите сохранить его, свой созданный объект:

public static void CreateNate(string name, int level, int health, int damage)
{
    CrusadersFactory.NateDragon = new Nate(name, level, health, damage);
}

Поскольку метод CreateNate также является частью CrusadersFactory, его можно сократить до:

public static void CreateNate(string name, int level, int health, int damage)
{
    NateDragon = new Nate(name, level, health, damage);
}

Проще говоря, когда вы использовали Nate NateDragon = ..., вы объявили новую переменную, вместо того чтобы обращаться к свойству статического класса NateDragon, которое вы уже объявили в своем CrusadersFactory классе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...