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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© -___Is、_C 中级黑马   /  2013-9-23 12:16  /  1451 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 -___Is、_C 于 2013-9-23 14:12 编辑

如何选择结构还是类求示例比较。


评分

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

查看全部评分

3 个回复

正序浏览
菜鸟回答:
每一个应用程序必然有一个类,却不一定有一个结构
结构是值类型,类是引用类型
类可以继承,结构不能
类中可以有无参构造函数,结构中的构造函数必须带参
应用上来讲:
结构通常应用于封装一组变量,适用于保存少量将来不会拓展的数据(也就是说不继承)

对于结构,我也很迷,因为使用的实在太少,我想如果将来会用到,可能就会理解加深了吧!

评分

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

查看全部评分

回复 使用道具 举报
类属于引用类型的数据类型,结构体属于值类型的数据类型,这两种数据类型的本质区别主要是各自指向的内存位置不同。传递类的时候,主要表现为是否同时改变了源对象。类在传递的时候,传递的内容是位于托管内存中的位置,结构体在传递的时候,传递的内容是位于程序堆栈区的内容。当类的传递对象修改时,将同时修改源对象,而结构体的传递对象修改时,不会对源对象产生影响。
在一个类中,可以定义默认的、不带参数的构造函数,而在结构体中不能定义默认的、不带参数的构造函数。两者都可以定义带有参数的构造函数,通过这些参数给各自的字段赋值或初始化
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;

  5. namespace 类对象
  6. {

  7.     //枚举  
  8.     public enum Gender
  9.     {
  10.         男,
  11.         女
  12.     }
  13.     //结构体
  14.     public struct stuPerson
  15.     {
  16.         public string stuName;
  17.         public int stuAge;
  18.         public Gender stuSex;
  19.         public void stuSayHello()
  20.         {
  21.             Console.WriteLine("我是{0},年龄{1},性别{2}", stuName, stuAge, stuSex);
  22.         }

  23.         //必须定义有参数的构造函数
  24.         public stuPerson(string name, int age, Gender sex)
  25.         {
  26.             this.stuName = name;
  27.             this.stuAge = age;
  28.             this.stuSex = sex;
  29.         }

  30.     }
  31.     class Program
  32.     {
  33.         static void Main(string[] args)
  34.         {
  35.             //实例化类
  36.             Person Liuxiang = new Person();  //无参数的构造函数实例化的对象
  37.             Liuxiang.Name = "刘翔";
  38.             Liuxiang.Age = 30;
  39.             Liuxiang.Sex = Gender.男;
  40.             Liuxiang.SayHello();
  41.             //声明另一个实例
  42.             Person LXSon = Liuxiang;
  43.             LXSon.Age = 10;
  44.             //查看类 LiuXiang 和 LXSon中字段的值
  45.             Console.WriteLine("LiuXiang 年龄{0}", Liuxiang.Age.ToString());  //10
  46.             Console.WriteLine("LXSon 年龄{0}", LXSon.Age.ToString());    //10

  47.             Console.WriteLine();
  48.             //结构体
  49.             stuPerson YaoMing = new stuPerson("姚明",33,Gender.男);
  50.             YaoMing.stuSayHello();
  51.             stuPerson YMSon = YaoMing;
  52.             YMSon.stuAge = 13;
  53.             //查看结构体中 YaoMing 和 YMSon中字段的值
  54.             Console.WriteLine("YaoMing 年龄{0}", YaoMing.stuAge.ToString());  //10
  55.             Console.WriteLine("YMSon 年龄{0}", YMSon.stuAge.ToString());    //10

  56.             Console.ReadLine();



  57.         }


  58.     }

  59.     class Person
  60.     {

  61.         //定义字段
  62.         public string Name;
  63.         public int Age;
  64.         public Gender Sex;

  65.         //定义方法
  66.         public void SayHello()
  67.         {
  68.             Console.WriteLine("我是{0},年龄{1},性别{2}", this.Name, this.Age, this.Sex);
  69.         }
  70.         //无参数的构造函数
  71.         public Person()
  72.         {

  73.         }
  74.         //有参数的构造函数
  75.         public Person(string name, int age, Gender sex)
  76.         {
  77.             this.Name = name;
  78.             this.Age = age;
  79.             this.Sex = sex;
  80.         }


  81.     }

  82. }
复制代码
另外类可以实现继承接口,结构只能实现接口

评分

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

查看全部评分

回复 使用道具 举报
本帖最后由 追寻Dream 于 2013-9-23 13:39 编辑

   
   (1)class中默认的成员访问权限是private的,而struct中则是public的。   
   (2)从class继承默认是private继承,而从struct继承默认是public继承。   
一.类与结构的示例比较:   
     
    结构示例:        
   
    public   struct   Person   
    {   
        string   Name;   
        int   height;   
          int   weight   
        public   bool   overWeight()
        {
          //implement   something   
        }   
    }   
   
      
    类示例:     
     
    public   class   TestTime   
    {   
       int   hours;  
       int   minutes;
       int   seconds;
       public   void   passtime()   
       {
          //implementation   of   behavior   
       }
    }   
    调用过程:
    public   class   Test   
    {
     public   static   ovid   Main   
     {   
        Person   Myperson=new   Person   //声明结构
        TestTime   Mytime=New   TestTime   //声明类
      }  
    }   
   

评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马