1. 简单示例
// 定义结构
public struct Person
{
public string name;
public int age;
}
class Program
{
static void Main(string[] args)
{
Person p = new Person(); // 实例化结构
p.name = "Rain Man";
p.age = 26;
Console.WriteLine(p.name + ", " + p.age.ToString()); // 输出: Rain Man, 26
}
}
2. 结构的构造函数
结构同样可以拥有构造函数,例如上例可以使用下面的程序实现;
public struct Person
{
public string name;
public int age;
public Person(string n, int a)
{
this.name = n;
this.age = a;
}
}
class Program
{
static void Main(string[] args)
{
Person p = new Person("Rain Man", 26); // 实例化并调用构造函数
Console.WriteLine(p.name + ", " + p.age.ToString()); // 输出: Rain Man, 26
}
}
3. 结构的实例化可以不使用 new 关键字
public struct Person
{
public string name;
public int age;
public Person(string n, int a)
{
this.name = n;
this.age = a;
}
}
class Program
{
static void Main(string[] args)
{
Person p; // 由于未使用new关键字,因此不会调用Person的构造函数
p.name = "Rain Man";
p.age = 26;
Console.WriteLine(p.name + ", " + p.age.ToString()); // 输出: Rain Man, 26
}
}
4. 结构的运算符重载
public struct Person
{
public string name;
public int age;
public Person(string n, int a)
{
this.name = n;
this.age = a;
}
// 运算符重载必须为:static
// 函数的返回类型为: Person
// 函数的参数类型为: Person
public static Person operator +(Person p1, Person p2)
{
Person p;
p.name = p1.name + " and " + p2.name;
p.age = p1.age + p2.age;
return p;
}
}
class Program
{
static void Main(string[] args)
{
Person p1 = new Person("Tom", 26);
Person p2 = new Person("Jerry", 10);
Person p = p1 + p2; // 使用运算符(+)重载
Console.WriteLine(p.name + ", " + p.age.ToString()); // 输出: Tom and Jerry, 36
}
}
5. 结构与类的区别
从上面的示例可以看出结构和类很相似,一般来讲结构能够实现的功能,类都可以实现。 结构体作为一种自定义的数据类型,具有以特点:
- 值类型,相比“类”而言对内存开销较小;
- 不能够继承,不能够作为一个类的“基类”;
- 结构体继承自object类。
C#:结构的更多相关文章
-
【.net 深呼吸】细说CodeDom(1):结构大观
CodeDom 是啥东东?Html Dom听过吧,XML Dom听过吧.DOM一般可翻译为 文档对象模型,那 Code + DOM呢,自然是指代码文档模型了.如果你从来没接触过 CodeDom,你大概 ...
-
读书笔记:《HTML5开发手册》--HTML5新的结构元素
读书笔记:<HTML5开发手册> (HTML5 Developer's CookBook) 虽然从事前端开发已有很长一段时间,对HTML5标签也有使用,但在语义化上面理解还不够清晰.之前在 ...
-
Python学习--04条件控制与循环结构
Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...
-
HTML5 语义元素(一)页面结构
本篇主要介绍HTML5增加的语义元素中关于页面结构方面的,包含: <article>.<aside>.<figure>.<figcaption>.< ...
-
React在开发中的常用结构以及功能详解
一.React什么算法,什么虚拟DOM,什么核心内容网上一大堆,请自行google. 但是能把算法说清楚,虚拟DOM说清楚的聊聊无几.对开发又没卵用,还不如来点干货看看咋用. 二.结构如下: impo ...
-
ElasticSearch 5学习(10)——结构化查询(包括新特性)
之前我们所有的查询都属于命令行查询,但是不利于复杂的查询,而且一般在项目开发中不使用命令行查询方式,只有在调试测试时使用简单命令行查询,但是,如果想要善用搜索,我们必须使用请求体查询(request ...
-
ASP.NET Core应用针对静态文件请求的处理[4]: DirectoryBrowserMiddleware中间件如何呈现目录结构
和StaticFileMiddleware中间件一样,DirectoryBrowserMiddleware中间本质上还是定义了一个请求地址与某个物理目录之间的映射关系,而目标目录体现为一个FilePr ...
-
Go结构体实现类似成员函数机制
Go语言结构体成员能否是函数,从而实现类似类的成员函数的机制呢?答案是肯定的. package main import "fmt" type stru struct { testf ...
-
CRL快速开发框架系列教程十(导出对象结构)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
-
Javacript实现字典结构
字典是一种用[键,值]形式存储元素的数据结构.也称作映射,ECMAScript6中,原生用Map实现了字典结构. 下面代码是尝试用JS的Object对象来模拟实现一个字典结构. <script& ...
随机推荐
-
(转)Unity3D研究院之异步加载游戏场景与异步加载游戏资源进度条(三十一)
异步任务相信大家应该不会陌生,那么本章内容MOMO将带领大家学习Unity中的一些异步任务.在同步加载游戏场景的时候通常会使用方法 Application.LoadLevel(“yourScene ...
-
Leetcode#91 Decode Ways
原题地址 动态规划题,注意0导致的小陷阱. 代码: int numDecodings(string s) { ] < ] > ; ] >= ] <= : ; ; int nex ...
-
无法将 flash.display::Sprite@156b7b1 转换为 mx.core.IUIComponent
无法将 flash.display::Sprite@156b7b1 转换为 mx.core.IUIComponent 在Flex Application里,是不能直接用addChild添加Sprite ...
-
SQL - 添加外键
不解释: ---先创建外键的column ALTER TABLE tblLicenses ADD ProductID int not null; ---添加外键 ALTER TABLE tblLice ...
-
dijkstra 优先队列最短路模板
;;*maxn];,):id(a),dist(b){} )); ;i<=n;i++)dist[i]=inf; dist[st]=; ;i= ...
-
oracle 数据库删除表或表数据恢复问题
oracle恢复误删除的数据:使用闪回,ORACLE 10G及以上版本! 1. flashback table table_name to timestamp systimestamp-1; (sys ...
-
oracle目录操作
1.创建目录 create directory dir_name as 'dir_path' (dir_path必须事先手动创建) 2.授权 grant read,write on director ...
-
Sed+Grep 快速替换查找字段(批量替换字符串)
格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl路径` 命令分解: grep 查找字段 -rl路径 列出”路径”中” 查找字段” 的所有文件 ...
-
linux shell cut 命令
cut命令 cut命令用于从文件或者标准输入中读取内容并截取每一行的特定部分并送到标准输出. 截取的方式有三种:一是按照字符位置,二是按照字节位置,三是使用一个分隔符将一行分割成多个field,并提取 ...
-
(转)测试rootvg卷组的镜像的官方做法
测试rootvg卷组的镜像的官方做法 这篇文档介绍了测试rootvg卷组镜像的方法,此文档仅使用于带有热插拔硬盘的pSeries服务器.由于rootvg卷组包含有AIX操作系统,在做卷组镜像配置上比非 ...