2016-10-11 4 views
0

Я пытаюсь использовать метод для создания объекта и вернуть этот объект в main(). В основном я хочу иметь доступ к свойствам этого объекта, например, print Holly.age. VS не распознает объект Холли в main(), чтобы иметь какие-либо свойства. Кто-нибудь может сказать, что я делаю неправильно, или дайте мне знать, если это не возможно в C#.C# получение значений свойств из объекта

Заранее благодарим любого, кто дает время, чтобы помочь.

class program 
{ 

    static void Main(string[] args) 
    { 
     object Holly = createobject(Holly, 21); 
     int hollyage = Holly.age; // This Line is the problem Holly.age is not recognized 
     // as anything 

    } 

    public static object createobject(string name, int i) 
    { 
    Cat Holly = new Cat(name, i); 
    return Holly; 
    } 

    public class Cat 
    { 
    public string name; 
    public int age; 
    public string Name 
     { 
      get { return this.name; } 
      set { this.name = value; } 
     } 
    public int Age 
     { 
      get { return this.age; } 
      set { this.age = value; } 
     } 
    public Cat(string name, int age) 
     { 
      this.name = name; 
      this.age = age; 
     } 

} 
+3

Помимо всего прочего, сейчас самое подходящее время, чтобы узнать о: 1) соглашениях об именовании .NET; 2) условные обозначения; 3) автоматически реализуемые свойства. –

ответ

1

Ваш метод createobject возвращает object. Таким образом, вы должны сначала привести его обратно в Cat, прежде чем вы можете получить доступ к Age:

int hollyage = ((Cat)Holly).Age; 

Кроме того ваш звонок в createobject неправильно. Он запрашивает строку. Изменить на:

createobject("Holly", 21); 

Правильный способ написания кода будет:

static void Main(string[] args) 
{ 
    //variable name in camelCase. 
    //"Holly" is a string 

    object holly = CreateObject("Holly", 21); 

    //Casting from object to Cat so you can access Age property 
    int hollyAge = ((Cat)holly).Age; 
} 

//Function names EachWorkCapitalized 
public static object CreateObject(string name, int i) 
{ 
    Cat holly = new Cat(name, i); 
    return holly; 
} 

public class Cat 
{ 
    //If you implement your properties with the default get set behavior 
    //better use automatically implemented properties 
    public string Name { get; set; } 
    public int Age { get; set; } 

    public Cat(string name, int age) 
    { 
     Name = name; 
     Age = age; 
    } 
} 
2

VS не распознает объект Холл в основном(), чтобы иметь какое-либо свойство

Это потому, что вы указали Holly как object, а не Cat, и аналогично ваша процедура создания возвращает object, а не Cat.

Чтобы иметь возможность использовать любого из свойств Cat вы должны бросить Holly назад Cat или еще лучше, вернуться Cat из вашего создания рутины. Если вы не намерены расширить создать процедуру, чтобы сделать больше, вы на самом деле не нужно, и можно просто сделать:

Cat Holly = new Cat("Holly", 21); 

У вас также есть как открытые поля и открытые свойства в вашем Cat классе. Поля должны быть закрытыми, но это не является причиной проблемы.

0

Вы на самом деле не нужно public static object createobject()

Вы можете просто удалить, что и изменить ваш главный на:

static void Main(string[] args) 
    { 
     Cat Holly = new Cat("Holly", 21); 
     int hollyage = Holly.age; 
    } 
0

Проблема заключается в том, что Холли определяется как класс объекта, а классы объектов не имеют age или Age.

Вы должны изменить строку как:

Cat Holly = createObject("Holly", 21) as Cat; 

Тогда IntelliSense распознает переменную Holly как типа Cat.

0

Вы всегда можете применить объект к соответствующему типу для доступа к его членам.

int hollyage = ((Cat)Holly).Age; 
Смежные вопросы