读书人

结构的有关问题 新手求解疑

发布时间: 2013-04-05 10:24:33 作者: rapoo

结构的问题 新手求解疑
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 练习2
{
class Program
{
static void Main(string[] args)
{
MyClass myclass = new MyClass("赵", "子龙", "", );
myclass.Age=22;
myclass.Sex="男";
string name1=myclass.Name();
Console.WriteLine("我叫{0},性别:{1},年龄:{2}",name1,myclass.Sex,myclass.Age);
Console.ReadKey();
}
struct MyClass
{
private string firstname;
private string secondname;
private int age;
private string sex;
public MyClass(string firstname, string secondname, string sex, int age)
{
this.age = age;
this.sex = sex;
this.firstname = firstname;
this.secondname = secondname;
}
public int Age
{
get { return age; }
set { age = value; }
}
public string Sex
{
get { return sex; }
set { sex = value; }
}
public string Name()
{
return firstname + secondname;
}


}
}
}
只有给MyClass myclass = new MyClass("赵", "子龙", "", );
赋值才行 这样怎么不行了myclass.Age=22;
谢大神!!!
[解决办法]
怎么不行,我运行你的代码,输出结果是

我叫赵子龙,性别:男,年龄:22

不是可以的吗?
[解决办法]
结构对象使用构造函数之后之后是可以对其公共属性赋值的

MyClass myclass = new MyClass("赵", "子龙", "", ); 你不是最后一个参数没写嘛??

[解决办法]
楼主意思是:

MyClass myclass;
myclass.Age=22;
myclass.Sex="男";

这样写为什么不行吧?

如果不new的话,myclass的字段都没有初始化,c#不允许调用字段没有初始化的实例,所以虽然myclass这个实例已经生成,仍然无法调用其方法和属性,

c#产生的错误是实例为初始化,

如果你直接赋值字段,比如如果age成员是public,你直接myclass.age=22;是可以的,但myclass.Age=22不行,是因为这个写法事实上调用了一个方法myclass.Set_Age(int value);

[解决办法]
所以,只要你的结构体有一个字段是private,那么你就只能new之后才调用它的方法属性,

但和c++不同,你无须担心new一个结构体会开销很大,即使是new一个结构体实例,它的内存仍然在堆栈中分配,不是在堆中分配,效率很高,和不用new一样高,

读书人网 >C#

热点推荐