• 友链

  • 首页

  • 文章归档
h u a n b l o g
h u a n b l o g

欢

HI,Friend

04月
12
C#

结构

发表于 2022-04-12 • 字数统计 3142 • 被 1,309 人看爆

概念

结构是程序员定义的数据结构,与类非常相似。有数据成员和函数

与类区别

  • 类是引用类型而结构是值类型;
  • 结构是隐式密封的,这意味着它们不能被派生。

语法

struct StructName
{
    MemberDeclarations;
}

例

struct Point
{
    public int X;
    public int Y;
}

class Program
{
    static void Main(string[] args)
    {
        Point first, second, third;
        first.X = 10;
        first.Y = 10;
        second.X = 20;
        second.Y = 20;
        third.X = first.X + second.X;
        third.Y = first.Y + second.Y;

        Console.WriteLine($"first.X: {first.X},first.Y:{first.Y}");
        Console.WriteLine($"second.X: {second.X},second.Y:{second.Y}");
        Console.WriteLine($"third.X: {third.X},third.Y:{third.Y}");
        Console.ReadKey();
    }
}

结果

first.X: 10,first.Y:10
second.X: 20,second.Y:20
third.X: 30,third.Y:30

结构是值类型

  • 结构类型的变量不能为null;
  • 两个结构变量不能引用同一对象。

对结构赋值

把一个结构赋值给另一个结构,就将一个结构的值复制给另一个结构

例


class CSimple
{
    public int X;
    public int Y;
}

struct Simple
{
    public int X;
    public int Y;
}

class Program
{
    static void Main(string[] args)
    {
        CSimple cs1 = new CSimple(), cs2 = null;
        Simple ss1 = new Simple(), ss2 = new Simple();

        cs1.X = ss1.X = 5;
        cs1.Y = ss1.Y = 10;
        cs2 = cs1;
        ss2 = ss1;


        Console.ReadKey();
    }
}

结构赋值.png

构造函数和析构函数

结构可以有实例构造函数和静态构造函数,但不允许有析构函数

实例构造函数

每个结构体都有一个无参数的构造函数
构造函数将结构的每个成员设置为该类型的默认值
值成员设置为它们的默认值,引用成员设置为null
调用构造函数,需使用new运算符

例

struct Simple
{
    public int X;
    public int Y;

    public Simple(int a, int b)
    {
        X = a;
        Y = b;
    }
}

class Program
{
    static void Main(string[] args)
    {

        Simple s1 = new Simple();
        Simple s2 = new Simple(5, 10);

        Console.WriteLine($"s1.X: {s1.X}, s1.Y:{s1.Y}");
        Console.WriteLine($"s2.X: {s2.X}, s2.Y:{s2.Y}");

        Console.ReadKey();
    }
}

结果

s1.X: 0, s1.Y:0
s2.X: 5, s2.Y:10

不使用new运算符创建结构的实例,有以下限制

  • 在显式设置数据成员之后,才能使用它们的值;
  • 在对所有数据成员赋值之后,才能调用任何函数成员。

例

struct Simple
{
    public int X;
    public int Y;

    public Simple(int a, int b)
    {
        X = a;
        Y = b;
    }
}

class Program
{
    static void Main(string[] args)
    {

        Simple s1, s2;
        Console.WriteLine($"s1.X: {s1.X}, s1.Y:{s1.Y}");      //编译错误
        s2.X = 5;
        s2.Y = 10;
        Console.WriteLine($"s2.X: {s2.X}, s2.Y:{s2.Y}");      //编译成功

        Console.ReadKey();
    }
}

静态构造函数

与类相似,结构的静态构造函数创建并初始化静态数据成员,而且不能引用实例成员
规则与类的静态构造函数一样

以下行为发生前,将会调用静态构造函数

  • 调用显式声明的构造函数。
  • 引用结构的静态成员。

构造函数与析构函数.png

字段初始化

不允许字段初始化

例

struct Simple
{
    public int x = 0;   //编译错误
    public int y = 10;  //编译错误
}

结构是密封的

结构总是隐式密封的,因此,不能从它们派生其他结构。

不能用的修饰符

protected、internal、abstract、virtual
分享到:
枚举
抽象类与抽象成员
  • 文章目录
  • 站点概览
欢

网红 欢

你能抓到我么?

Email RSS
看爆 Top5
  • mac系统版本与Xcode版本有冲突 4,089次看爆
  • JAVA_HOME环境配置问题 3,739次看爆
  • AssetBundle使用 3,507次看爆
  • VSCode配置C++开发环境 3,262次看爆
  • Lua反射 3,138次看爆

Copyright © 2025 欢 粤ICP备2020105803号-1

由 Halo 强力驱动 · Theme by Sagiri · 站点地图