我正在尝试使用方法创建对象并将该对象返回到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;
}
}
答案 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被定义为对象类,而对象类没有age
或Age
属性。
您应该将行更改为:
Cat Holly = createObject("Holly", 21) as Cat;
然后intellisense会将Holly变量识别为Cat
类型。
答案 4 :(得分:0)
您始终可以将对象强制转换为正确的类型以访问其成员。
int hollyage = ((Cat)Holly).Age;