c#从对象

时间:2016-10-11 12:57:02

标签: c#

我正在尝试使用方法创建对象并将该对象返回到main()。一旦进入main,我希望能够访问该对象的属性,例如print Holly.age。 VS无法识别main()中的对象Holly具有任何属性。是否有人能够说出我做错了什么,或者让我知道在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;
        }

}

5 个答案:

答案 0 :(得分:2)

  

VS无法识别main()中的对象Holly具有任何属性

这是因为您已将Holly声明为object而不是Cat,同样您的创建例程返回object而不是Cat

为了能够使用Cat的任何属性,您需要将Holly强制转换回Cat或更好,从您的创建例程返回Cat。除非您打算扩展您的创建例程以执行更多操作,否则您根本不需要它,并且可以简单地执行:

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

您的Cat课程中也有公共字段和公共属性。这些字段应该是私有的,但这不是问题的原因。

答案 1 :(得分: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 :(得分:0)

您实际上并不需要public static object createobject()

您只需将其删除并将主页更改为:

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

答案 3 :(得分:0)

问题是Holly被定义为对象类,而对象类没有ageAge属性。

您应该将行更改为:

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

然后intellisense会将Holly变量识别为Cat类型。

答案 4 :(得分:0)

您始终可以将对象强制转换为正确的类型以访问其成员。

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