c#从对象中获取属性值

本文关键字:属性 获取 对象 | 更新日期: 2023-09-27 18:12:45

我试图使用一个方法来创建一个对象并将该对象返回给main()。一旦在主我想要能够访问该对象的属性,如打印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;
        }
}

c#从对象中获取属性值

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

这是因为您已经将Holly声明为object而不是Cat,类似地,您的create例程返回object而不是Cat

为了能够使用Cat的任何属性,您需要将Holly转换回Cat,或者更好的是,从创建例程返回Cat。除非你打算扩展你的create例程来做更多的事情,否则你真的不需要它,你可以简单地这样做:

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

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

方法createobject返回一个object。因此,在访问Age之前,必须先将其强制转换回Cat:

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;
    }
}

其实不需要public static object createobject()

你可以简单地删除它并将Main更改为:

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

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

你应该把这一行改成:

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

则智能感知将Holly变量识别为Cat类型。

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

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