• C#结构体定义的详解


    C#结构体定义的情况:

    C#结构体定义也可以象类一样可以单独定义.

    1. class   a{};
    2. struct a{};

    C#结构体定义也可以在名字前面加入控制访问符.

    1. public struct student{};
    2. internal struct student{};

    如果结构体student没有publice或者internal的声明 类program就无法使用student结构定义 obj对象

    如果结构体student的元素没有public的声明,对象obj就无法调用元素x

    因为默认的结构体名和元素名是private类型

    C#结构体定义之程序:

    1. using System;
    2. public struct student
    3. {
    4.    public int x;
    5. };
    6. class program
    7. {
    8. public static void Main()
    9. {
    10. student obj=new student();
    11. obj.x=100;   
    12. }
    13. };

    在结构体中也可以定义静态成员与类中一样,使用时必须用类名,或结构名来调用不属于实例,声明时直接定义.

    C#结构体定义程序:

    1. using System;
    2. public struct student
    3. {
    4. public static int a = 10;
    5. };
    6. class exe
    7. {
    8. public static void Main()
    9. {
    10. Console.WriteLine( student.a = 100);
    11. }
    12. };

    1. using System;
    2. class base
    3. {
    4. public struct student
    5. {
    6. public static int a = 10;
    7. };
    8. }
    9. class exe
    10. {
    11. public static void Main()
    12. {
    13. Console.WriteLine( base.student.a = 100);
    14. }
    15. };

    在结构体中可以定义构造函数以初始化成员,但不可以重写默认无参构造函数和默认无参析构函数

    C#结构体定义程序:

    1. public struct student
    2. {
    3.    public int x;
    4.    public int y;
    5.    public static int z;
    6.    public student(int a,int b,int c)
    7. {
    8. x=a;
    9. y=b;
    10. student.z=c;
    11. }
    12. };

    在结构体中可以定义成员函数。

    C#结构体定义程序:

    1. public struct student
    2. {
    3.    public void list()
    4. {
    5. Console.WriteLine("这是构造的函数");
    6. }
    7. };

    结构体的对象使用new运算符创建(obj)也可以直接创建单个元素赋值(obj2)这是与类不同的因为类只能使用new创建对象

    C#结构体定义程序:

    1. public struct student
    2. {
    3.    public int x;
    4.    public int y;
    5.    public static int z;
    6.    public student(int a,int b,int c)
    7. {
    8. x=a;
    9. y=b;
    10. student.z=c;
    11. }
    12. };
    13. class program
    14. {
    15. public static void Main()
    16. {
    17.    student obj=new student(100,200,300);
    18.    student obj2;
    19.    obj2.x=100;
    20.    obj2.y=200;
    21.    student.z=300;
    22. }
    23. }

    在使用类对象和函数使用时,使用的是引用传递,所以字段改变

    在使用结构对象和函数使用时,是用的是值传递,所以字段没有改变

    C#结构体定义程序:

    1. using System;
    2. class class_wsy
    3. {
    4. public int x;
    5. }
    6. struct struct_wsy
    7. {
    8. public int x;
    9. }
    10. class program
    11. {
    12. public static void class_t(class_wsy obj)
    13. {
    14. obj.x = 90;
    15. }
    16. public static void struct_t(struct_wsy obj)
    17. {
    18. obj.x = 90;
    19. }
    20. public static void Main()
    21. {
    22. class_wsy obj_1 = new class_wsy();
    23. struct_wsy obj_2 = new struct_wsy();
    24. obj_1.x = 100;
    25. obj_2.x = 100;
    26. class_t(obj_1);
    27. struct_t(obj_2);
    28. Console.WriteLine("class_wsy obj_1.x={0}",obj_1.x);
    29. Console.WriteLine("struct_wsy obj_2.x={0}",obj_2.x);
    30. Console.Read();
    31. }
    32. }

    C#结构体定义程序运行结果为:

    1. class_wsy obj_1.x=90
    2. struct_wsy obj_2.x=100
  • 相关阅读:
    Xml 映射文件中,除了常见的 select|insert|updae|delete 标签之外,还有哪些标签?
    zookeeper 是如何保证事务的顺序一致性的?
    什么是 Callable 和 Future?
    MyBatis 实现一对一有几种方式?具体怎么操作的?
    Zookeeper 对节点的 watch监听通知是永久的吗?为什么 不是永久的?
    合同测试你懂什么?
    查看各类环境变量用什么命令?
    我们如何进行跨功能测试?
    怎么查看系统支持的所有信号?
    Mybatis 是否支持延迟加载?如果支持,它的实现原理是什么?
  • 原文地址:https://www.cnblogs.com/top5/p/1685513.html
Copyright © 2020-2023  润新知