zoukankan      html  css  js  c++  java
  • 面向对象基础——结构体

    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     }  
  • 相关阅读:
    centos7安装es6.4.0
    将mysql数据同步到ES6.4(全量+增量)
    c#基于supersocket的简单websocket服务端收发消息实现
    c#log4net简单好用的配置
    MongoDB安装配置教程
    IntelliJ IDEA 中创建maven项目
    VMware Workstation 的安装和使用
    Redis使用场景
    Redis 下载安装
    MySQL--启动和关闭MySQL服务
  • 原文地址:https://www.cnblogs.com/lcxBlog/p/4501301.html
Copyright © 2011-2022 走看看