首先结构是值类型。

结构是使用 struct 关键字定义的,结构如下:

struct 结构名
{
}

结构概述

结构具有以下特点:

  • 结构是值类型,而类是引用类型。 (结构不能包含显式的无参数构造函数)

  • 与类不同,结构的实例化可以不使用 new 运算符。

  • 结构可以声明构造函数,但它们必须带参数。

  • 一个结构不能从另一个结构或类继承,而且不能作为一个类的基。所有结构都直接继承自 System.ValueType,后者继承自System.Object

  • 结构可以实现接口。

  • 结构在定义变量时不能给定初始值。(另加)

  • 如果要在结构中使用构造函数则必须给所有的变量赋值(在构造函数中直接给变量赋值而不是给变量的属性赋值,因为在未赋值之前属性是没有值的所以不能直接给属性)(另加)

  • 所有的结构都隐式继承自ValueType类,不需要显示指定;。(另加)

  • 结构的继承列表中只允许有接口。(另加)

  • 结构的继承是三层的:object >> valuetype >> "结构" 。(另加)

例:(自己写的,描述员工信息,姓名、年龄、工资)

//结构,结构是值类型的
    //结构在定义变量时不能给定初始值
    struct Employeestruct
    {
        private string name;
        public string Name
        {
            get { return name; }
            set { name = value; }
        }

private int age;
        public int Age
        {
            get { return age; }
            set { age = value; }
        }

private int gongzhi;
        public int Gongzhi
        {
            get { return gongzhi; }
            //set { gongzhi = value; }
        }
        //有参数构造函数
        public Employeestruct(string _name, int _age, int _gongzhi)
        {
            //如果要在结构中使用构造函数则必须给所有的变量赋值(在构造函数中赋值)
            this.name = _name;
            this.age = _age;
            this.gongzhi = _gongzhi;
        }
    }

//使用结构

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

////实例化Employeestruct结构
            //Employeestruct empstruct = new Employeestruct("Steven", 22, 10000);
            //Console.WriteLine("姓名:{0}\n年龄:{1}\n工资:{2:C2}", empstruct.Name, empstruct.Age, empstruct.Gongzhi);
            Console.Read();
        }
    }

使用结构(C# 编程指南)

struct 类型适于表示 PointRectangle 和 Color 等轻量对象。尽管可以将一个点表示为,但在某些情况下,使用结构更有效。例如,如果声明一个 1000 个 Point 对象组成的数组,为了引用每个对象,则需分配更多内存;这种情况下,使用结构可以节约资源。由于 .NET Framework 包含名为 Point的对象,因此我们转而调用结构“CoOrds”。

 

public struct CoOrds
{
    public int x, y;
    public CoOrds(int p1, int p2)
    {
        x = p1;
        y = p2;
    }
}

声明结构的默认(无参数)构造函数是错误的。总是提供默认构造函数以将结构成员初始化为它们的默认值。在结构中初始化实例字段也是错误的。

如果使用 new 运算符创建结构对象,则会创建该结构对象,并调用适当的构造函数。与类不同,结构的实例化可以不使用 new 运算符。如果不使用new,则在初始化所有字段之前,字段都保持未赋值状态且对象不可用。

对于结构,不像类那样存在继承。一个结构不能从另一个结构或类继承,而且不能作为一个类的基。但是,结构从基类 Object 继承。结构可实现接口,其方式同类完全一样。

与 C++ 不同,无法使用 struct 关键字声明类。在 C# 中,类与结构在语义上是不同的。结构是值类型,而类是引用类型。有关更多信息,请参见值类型

除非需要引用类型语义,否则系统将较小的类作为结构处理效率会更高。

示例 1


下面的示例演示使用默认构造函数和参数化构造函数的 struct 初始化。

 

public struct CoOrds
{
    public int x, y;
    public CoOrds(int p1, int p2)
    {
        x = p1;
        y = p2;
    }
}

// Declare and initialize struct objects.
class TestCoOrds
{
    static void Main()
    {
        // Initialize:   
        CoOrds coords1 = new CoOrds();
        CoOrds coords2 = new CoOrds(10, 10);

// Display results:
        System.Console.Write("CoOrds 1: ");
        System.Console.WriteLine("x = {0}, y = {1}", coords1.x, coords1.y);

System.Console.Write("CoOrds 2: ");
        System.Console.WriteLine("x = {0}, y = {1}", coords2.x, coords2.y);
    }
}

输出


CoOrds 1: x = 0, y = 0

CoOrds 2: x = 10, y = 10

示例 2


下面举例说明了结构特有的一种功能。它在不使用 new 运算符的情况下创建 CoOrds 对象。如果将 struct 换成 class,程序将不会编译。

 

public struct CoOrds
{
    public int x, y;
    public CoOrds(int p1, int p2)
    {
        x = p1;
        y = p2;
    }
}

// Declare a struct object without "new."
class TestCoOrdsNoNew
{
    static void Main()
    {
        // Declare an object:
        CoOrds coords1;

// Initialize:
        coords1.x = 10;
        coords1.y = 20;

// Display results:
        System.Console.Write("CoOrds 1: ");
        System.Console.WriteLine("x = {0}, y = {1}", coords1.x, coords1.y);
    }
}

输出


CoOrds 1: x = 10, y = 20

来自:http://blog.163.com/hweibin126@126/blog/static/17044246920101032420652/

最新文章

  1. MacOS使用AMPPS环境
  2. NFS网络文件系统安装配置
  3. CSS Hack相关知识
  4. MongoDB分片集群还原
  5. Introducing RecyclerView(二)
  6. oracle的购买价格研究
  7. JQuery焦点Table
  8. 一篇故事讲述了计算机网络里的基本概念:网关,DHCP,IP寻址,ARP欺骗,路由,DDOS等...
  9. 谈谈javascript的函数表达式及其应用
  10. 趋势:Chrome为打包应用提供强大新特性
  11. seajs +gruntjs 合作开发
  12. think in uml 2.1
  13. android 圆角 ImageView
  14. PDA智能设备解决方案打包及部署
  15. freemarker 简单操作
  16. Android 删除图片等资源文件 通知系统更新,重新扫描
  17. java 从网络Url中下载文件 (转)
  18. POJ2127 LICS模板
  19. OpenCV学习(30) 轮廓defects
  20. 【IdentityServer4文档】- 使用客户端凭据保护 API

热门文章

  1. 个人对JQuery Proxy()函数的理解
  2. HTML/CSS总结1
  3. Sublime Text 2 代码片断
  4. CentOS(RedHat)命令行永久修改IP地址、网关、DNS
  5. mybatis高级(1)(入门回顾)
  6. java selenium (一) selenium 介绍
  7. Linux小知识积累
  8. sql数据库获取表名称和表列名
  9. ubuntu 终端快捷键
  10. 转: Hibernate HQL查询 插入 更新(update)实例