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     }  
  • 相关阅读:
    【转】win8.1下安装ubuntu
    Codeforces 1025G Company Acquisitions (概率期望)
    Codeforces 997D Cycles in Product (点分治、DP计数)
    Codeforces 997E Good Subsegments (线段树)
    Codeforces 1188E Problem from Red Panda (计数)
    Codeforces 1284E New Year and Castle Building (计算几何)
    Codeforces 1322D Reality Show (DP)
    AtCoder AGC043C Giant Graph (图论、SG函数、FWT)
    Codeforces 1305F Kuroni and the Punishment (随机化)
    AtCoder AGC022E Median Replace (字符串、自动机、贪心、计数)
  • 原文地址:https://www.cnblogs.com/lcxBlog/p/4501301.html
Copyright © 2011-2022 走看看