首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

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

2013-04-05 
结构的问题新手求解疑using Systemusing System.Collections.Genericusing System.Linqusing System.Te

结构的问题 新手求解疑
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一样高,

热点排行