A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

c19t043

中级黑马

  • 黑马币:48

  • 帖子:57

  • 精华:0

© c19t043 中级黑马   /  2014-7-6 00:19  /  2517 人查看  /  17 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 c19t043 于 2014-7-8 18:29 编辑

-----------------下面,基础测试的时候题,结构一直没用,搜了下,做了下面的题
  class Program
    {
        //7、 定义一个结构叫MyColor,有三个成员,分别为red,green,blue
        //声明一个 MyColor类型的变量,并对其成员赋值.使MyColor可以表示成一个红色.
        static void Main(string[] args)
        {
            MyColor color = new MyColor("red","green","blue");
            Console.WriteLine(color.red);
            Console.ReadKey();
        }
    }
    struct MyColor
    {
        public string red;
        public string green;
        public string blue;
        public MyColor(string red, string green, string blue)
        {
            this.red = red;
            this.green = green;
            this.blue = blue;
        }
    }
-------------------这样做后,,感觉 结构 和 类 看不出 区别。
求帮助

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

17 个回复

倒序浏览
1. 把一些列相关的变量组织成为一个单一实体的过程,称之为生成结构的过程;
2. 这个单一实体的类型就叫做结构类型,每一个变量称之为结构的成员;
3. 比如可以定义通讯录记录结构的定义:
    struct PhoneBook{
           public string name;
           public string phone;
           public string address;
   }
   PhoneBook p1;
4. p1就是一个PhoneBook结构类型的变量,上面声明中的public表示对结构类型的成员的访问权限,对结构成员的访问通过结构变量名加上访问符“."号,再跟成员名称;
5.从定义上讲,类是一种数据结构,这种数据结构可能包含数据成员,函数成员以及其它的嵌套类型。其中数据成员类型有常量,域和事件;函数成员类型有方法,属性,索引指示器,操作符,构造函数和析构函数。
例如:使用new关键字可以建立类的一个实例,比如下面的代码:
calss A{ }
calss B{ }
   {           
        void F{
               A  a =new A();
         }
   }
在类B的方法F中创建了一个类A的实例。
类的继承声明,类B从类A中继承:
calss A{}
class B:A{}

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
刚好看到结构,结构与类的区别:
1、结构中的字段不能直接赋初始值,只能在构造函数中赋值
2、编译器会自动生成一个无参构造函数,不能自己再定义,不然会报错
3、在构造函数中必须要为结构体的所有字段赋值,所以,结构还不能定义自动属性,自动属性会生成一个不知名的字段,无法为它赋值
4、结构是值类型,类是引用类型,也就是说结构直接将数据存储在栈里,而类将数据存储在堆里面,栈的访问速度相对堆快。所以,当我们要表示一个轻量级对象的时候,可以定义为结构。

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
本帖最后由 dugubaitian 于 2014-7-6 09:36 编辑

其实土办法即刚开始学习的话通俗的理解在用法上 结构和类是完全一样的!!下面我们来说区别:1、最本质的区别是结构是值类型(即在初始化 例如你上面的MyColor color = new MyColor("red","green","blue"); 这个变量color被分配的地址是在栈中的,所有成员都必须进行初始化,每个成员都占有一定的栈空间,例如你这是三个string类型的变量,那么在初始化后给color分配的控件大小就是三个string类型的总大小),而类是引用类型的,即同上面的初始化过程中,例如有一个Myclass类,初始化:Myclass mc=new Myclass();过程中,给mc分配内存时候统统的都是固定的一个大小,存放的是其在堆中的地址,当用到它的其他成员时才在堆中调取!    这是两个最本质的区别,一定要理解,可以看看蒋坤老师画的逻辑图。
2.结构中变量不能赋初值;结构不能从另一个结构或者类派生,本身也不能被继承,因此不能定义抽象的结构;  虽然结构不能从类和结构派生,但可以集成接口。

  其实基本用法没有区别的,就是在一些传值的过程中因为类型的不同而产生不同的结果,所以希望你第一点多查查资料,多理解理解,他俩的本质一定要清楚就行了。

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
dugubaitian 发表于 2014-7-6 09:22
其实土办法即刚开始学习的话通俗的理解在用法上 结构和类是完全一样的!!下面我们来说区别:1、最本质的区 ...

结构 不能有继承,派生
结构,是值类型,实例化时,结构中共有A个成员,B个int类,C个string类,分配的内存大小是,,B+C
类    ,是引用类型,实例化时,  类中有D个成员,分配的内存大小事,,D
结构,变量不能赋初值,------结构中,不能有常量?
---------------------
是这个意思吗?
回复 使用道具 举报
结构,,中的字段不能直接赋初始值,--------结构中不能有常量?
结构,,不能有继承,派生
结构 ,,是值类型,实例化分配内存时,如果结构中有A个成员,其中B个int类,C个string类,内存大小是B+C
             而类,是引用类型,内存大小事A
————————————是这个区别吗?

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
看。。也是一种享受
回复 使用道具 举报
那道题只是让你定义一个color出来能表示红色,三色表示的话应该给red赋值255,green和blue都赋值0
  1.    class Program
  2.     {
  3.         //定义一个结构MyColor,三个成员分别为red,green,blue
  4.         public struct MyColor
  5.         {

  6.            public     int red;
  7.            public     int green;
  8.             public    int blue;
  9.         }
  10.         static void Main(string[] args)
  11.         {
  12.             //定义一个MyColor类型的color变量,对red赋值255,,green和blue赋值为0,则表示红色
  13.             MyColor color;
  14.             color.red = 255;
  15.             color.green = 0;
  16.             color.blue = 0;
  17.         }
  18.     }
复制代码



评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
结构是值类型:值类型在堆栈上分配地址,所有的基类型都是结构类型,例如:int 对应System.int32 结构,string 对应 system.string 结构 ,通过使用结构可以创建更多的值类型   
类是引用类型:引用类型在堆上分配地址   堆栈的执行效率要比堆的执行效率高,可是堆栈的资源有限,不适合处理大的逻辑复杂的对象。
所以结构处理作为基类型对待的小对象,而类处理某个商业逻辑  因为结构是值类型所以结构之间的赋值可以创建新的结构,而类是引用类型,类之间的赋值只是复制引用
回复 使用道具 举报
许庭洲 发表于 2014-7-6 06:45
1. 把一些列相关的变量组织成为一个单一实体的过程,称之为生成结构的过程;
2. 这个单一实体的类型就叫做 ...

学习了!
回复 使用道具 举报
好吧,我看了
回复 使用道具 举报
c19t043 发表于 2014-7-6 10:26
结构,,中的字段不能直接赋初始值,--------结构中不能有常量?
结构,,不能有继承,派生
结构 ,,是值 ...

结构中可以有常量,常量和字段都可以是结构的成员。
结构实例化时是在栈上面开辟空间,类实例化时是在堆上开辟空间,把new出来的空间地址放到栈上面
回复 使用道具 举报
我想到一点不知道对不对,类能继承,结构不能继承!
回复 使用道具 举报
别的同学给你回答了,要及时设置成提问结束。这样才能给你加分的。
回复 使用道具 举报
看完了,学习了,好贴。
回复 使用道具 举报
站个位子慢慢看
回复 使用道具 举报
学习了,好帖~~
回复 使用道具 举报
类                                                结构
引用类型                                 值类型
一般需要封装有属性                一般公开字段无属性
有默认构造函数                       无默认构造函数
new时字段可以不完全初始化   必须完全初始化
必须new                                   可以不new
类中可以为字段赋值               结构中不可以
类值放在栈中                          值放在堆中
可以被继承                               不可以被继承
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马