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;
}
}
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被定义为对象类,而对象类没有age
或Age
属性。
你应该把这一行改成:
Cat Holly = createObject("Holly", 21) as Cat;
则智能感知将Holly变量识别为Cat
类型。
始终可以将对象强制转换为正确的类型以访问其成员。
int hollyage = ((Cat)Holly).Age;