码迷,mamicode.com
首页 > 其他好文 > 详细

面向对象基础——结构体

时间:2015-05-13 21:27:19      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:

1.结构体的语法

  定义的时候需要使用关键字struct

[public] struct 结构名

 

{

 

public 类型名 变量名;

 

 

}

 

   我们常见的结构体:System.Drawing.Point、Size、Color

注意:

1.结构使用时可以new,也可以不new。如果不new,则使用前必须为结构成员赋值。

2.在结构中不能为变量直接赋初值,除非const(常量)、static(静态变量)

2.结构体与类

  它们是 .NET Framework 中的通用类型系统的两种基本构造。两者在本质上都属于数据结构,封装着一组整体作为一个逻辑单位的数据和行为。数据和行为是该类或结构的“成员”,它们包含各自的方法、属性和事件等。它们共享着大多数相同的语法。

  结构的使用方法与类很相似。什么时候使用类?什么时候使用结构?

 

  1.是否需要使用面向对象的特性:封装、继承、多态。,如果需要在某些情况下被继承或者使用多态等特性则只能用类。

 

  2.当类型中(类或结构)的成员比较多的时候,则考虑使用类。

3.结构体与类的详细区别

  1. 在语法上结构体受到的限制要比类更多:

    (1)在声明结构体的时候,如果要对字段赋值,那么这些字段必须声明为 const 或 static,否则无法初始化。

       在声明类的时候,可以对类中的所有字段赋值。

    (2)结构不能声明默认构造函数(没有参数的构造函数)或析构函数,如果要声明构造函数,必须声明带参数的构造函数。

       结构体的构造函数也可以重载,在构造函数中必须对结构体所有的成员进行初始化。

    (3)在结构体中不能定义析构函数

    (4)结构体不具备面向对象的特征,结构体不能从类或其他结构继承。所有结构都直接继承自System.ValueType,所有的类都继承自 System.Object

  2. 结构体是值类型,类是引用类型:

    结构体在栈中创建,类在堆中创建。

    将结构体赋值给新变量:

技术分享

    将类赋值给新变量:

技术分享

  

3. 结构体实现接口:

  结构体也可以实现接口,进行这样的操作后,获得的变量是引用类型。

  有结构体Struct1实现了接口Interface1 ,Interface1 face = new Struct1();

  这里我们获得的变量face是引用类型。

4. 结构体和类用途不同:

   类通常用于对较为复杂的行为建模,或对要在创建类对象后进行修改的数据建模。结构最适合一些小型数据结构,这些数据结构包含的数据以创建结构后不修改的数据为主。

 

结构体使用的例子:

 1     //结构体班级   
 2     struct StructClass : IClass
 3     {
 4         public int Count;//人数   
 5         public void AddStudent()
 6         {
 7             Count++;
 8         }
 9 
10         public void ShowCount()
11         {
12             Console.WriteLine(Count);
13         }
14 
15     }
16     //接口   
17     interface IClass
18     {
19         void AddStudent();//添加学生   
20         void ShowCount();//显示学生人数   
21     }
22     class Program
23     {
24         static void Main(string[] args)
25         {
26             StructClass s1 = new StructClass();
27             StructClass s2 = s1;
28             s1.AddStudent();
29             s1.ShowCount(); //输出1   
30             s2.ShowCount(); //输出0   
31             //说明s2和s1不指向同一个对象,s2=s1是创建了一个s1的副本   
32             //这是值类型很显著的标志   
33 
34             IClass ic1 = new StructClass();
35             IClass ic2 = ic1;
36             ic1.AddStudent();
37             ic1.ShowCount();//输出1   
38             ic2.ShowCount();//输出1   
39             //说明ic2和ic1指向同一个对象,ic2=ic1是将ic1的引用赋给ic2   
40             //这是引用类型很显著的标志   
41         }
42     }  

 

面向对象基础——结构体

标签:

原文地址:http://www.cnblogs.com/lcxBlog/p/4501301.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!