C# 类和结构
类和结构实际上都是创建对象的模板,每个对象都包含数据,并提供了处理和访问数据的方法 。
类定义了类的每个对象(称为实例)可以包含什么数据和功能。 例如,如 果一个类表示一个顾客,就可以定义字段 CustomerID、 FirstName、 LastName和 Address,以 包含该顾客的信息。 还可以定义处理在这些字段中存储的数据的功能。 接着,就可以实例化表示某个顾客的类的对象,为这个实例设置相关字段的值,并使用其功能。
class PhoneCustomer
(
public const string DayofSendingBill= "Monday";
public int CustomerID;
public string FirstName;
public string LastName;
)
一个类
结构与类的区别是它们在内存中的存储方式、 访问方式(类是存储在堆(heap)上 的引用类型,而结构是存储在栈(stack)上的值类型)和它们的一些特征(如结构不支持继承)。 较小的数据类型使用结构可提高性能。 但在语法上,结构与类非常相似,主要的区别是使用关键字 struct代替 dass来声明结构。
例如,如果希望所有的 Phonemtomer实 例都分布在栈上,而不是分布在托管堆上,就可以编写下面的语句:
struct PhoneCustomerstruct
{
public const string DayofsendingBill = "Monday";
public int CustomerID;
public string FirstName;
public string LastName;
}
一个结构
对于类和结构,都使用关键字 new 来声明实例:这个关键字创建对象并对其进行初始化。 在下面的例子中,类和结构的字段值都默认为 0:
phonecustomer myCustomer = new PhoneCustomer(); // works for a class
Phonecustomerstruct myCustomer2 = new PhoneCustomerstruct();// works for struct
在大多数情况下,类要比结构常用得多。 因此,我们先讨论类,然后指出类和结构的区别,以及选择使用结构而不使用类的特殊原因。 但除非特别说明,否则就可以假定用于类的代码也适用于结构。
类中的数据和函数称为类的成员。Microsoft 的正式术语对“数据成员”和“函数成员”进行了区分。
数据成员是包含类的数据— — 字段、 常量和事件的成员。 数据成员可以是静态数据。 类成员总是实例成员,除非用static进行显式的声明。
函数成员提供了操作类中数据的某些功能,包括方法、 属性、 构造函数和终结器(finalizer) 、 运算符以及索引器。
● 方法是与某个类相关的函数,与数据成员一样,函数成员默认为实例成员,使用 static 修饰符可以把方法定义为静态方法。
● 属性是可以从客户端访问的函数组,其访问方式与访问类的公共字段类似。 C#为读写类中的属性提供了专用语法,所 以不必使用那些名称中嵌有 Get或 set的方法。 因为属性的这种语法不同于一般函数的语法,在客户端代码中,虚拟的对象被当做实际的东西。
● 构造函数是在实例化对象时自动调用的特殊函数。 它们必须与所属的类同名,且不能有返回类型。 构造函数用于初始化字段的值。
● 终结器类似于构造函数,但是在 CLR检测到不再需要某个对象时调用它。 它们的名称与类相同,但前面有一个 “~” 符号。 不可能预测什么时候调用终结器。
● 运算符执行的最简单的操作就是加法和减法。 在两个整数相加时,严格地说,就是对整数使用 “+” 运算符。 C#允许指定把已有的运算符应用于自己的类(运算符重 载)。
● 索引器允许对象以数组或集合的方式进行索引。
ref关键字。 如果把一个参数传递给方法,且这个方法的输入参数前带有ref关键字,则该方法对变量所做的任何改变都会影响原始对象的值,在传递给方法之前 ,无论是按值传递,还是按引用传递,任何变量都必须初始化。
out关键字。在方法的输入参数前面加上out前缀时,传递给该方法的变量可以不初始化。 该变量通过引用传递,所以在从被调用的方法中返回时,对应方法对该变量进行的任何改变都会保留下来。
C# 类和结构的更多相关文章
- C#基础回顾(二)—页面值传递、重载与重写、类与结构体、装箱与拆箱
一.前言 -孤独的路上有梦想作伴,乘风破浪- 二.页面值传递 (1)C#各页面之间可以进行数据的交换和传递,页面之间可根据获取的数据,进行各自的操作(跳转.计算等操作).为了实现多种方式的数据传递,C ...
- swift学习笔记3——类、结构体、枚举
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- java 深入技术七(类的结构和反射)
1.java反射(reflect) java 类的结构 java反射机制就是把java类按结构分解,每一部分对应特定的反射类 java反射机制允许运行时加载,探知和使用在编译期间完全未知的classe ...
- 【JavaScript】获取未知类的结构
目录结构: // contents structure [-] 为什么需要获取类的结构 关于JavaScript中的类 定义类的方法 第一种 第二种 DEMO HTML页面 date文件 注意事项 参 ...
- Swift3.0P1 语法指南——类和结构体
原档:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programmi ...
- 【Swift学习】Swift编程之旅---类和结构体(十三)
与其他编程语言所不同的是,Swift 并不要求你为自定义类和结构去创建独立的接口和实现文件.你所要做的是在一个单一文件中定义一个类或者结构体,系统将会自动生成面向其它代码的外部接口. 注意:通常一个类 ...
- swift学习笔记之-类和结构体
//类和结构体 import UIKit //类和结构体 /* 1.枚举enum.结构体struct和String.Array.Dictionary类型,都属于值传递类型,被赋值给新的常量或变量时传递 ...
- swift 类和结构体
1:类和结构体定义 类和结构体分别通过关键字class 和struct定义. swift的编码风格是类class和结构体struct名字使用大写字母开头的匈牙利表示法,相反的.类的方法和属性则用小写字 ...
- Swift面向对象基础(上)——Swift中的类和结构体(上)
学习来自<极客学院> import Foundation //1.定义类和结构体 /* [修饰符]calss 类名{ 零到多个构造器 零到多个属性 零到多个方法 零到多个下标 } 修饰符可 ...
- C#基础知识系列三(类和结构体、String和StringBuilder、equals和==)
前言 这一节主要来了解一下类和结构体之间的异同点.以及针对String和StringBuilder的用法.equals和==,其实可以看出很多地方都用到了上一节的值类型和引用类型.堆栈和装箱拆箱操作吧 ...
随机推荐
- Effective C++条款01: 视C++为一个语言联邦
一开始C++定义为:C with Classes. 如今的C++已经是一个多重范型编程语言,可以把C++视为有四个次语言组成的联邦语言. C.C++任然以C为基础.区块.语句.预处理.内置语言类型.数 ...
- OpenGL环境搭建Windows+Mac+Linux
OpenGL环境搭建Windows+Mac+Linux Mac平台下 下载列表:GLFWcmake 下载的GLFW解压缩 然后安装cmake, 安装好cmake之后打开 1.browse source ...
- redis 2.4异常
最近公司redis服务出现了异常,记录下教训: redis异常后:观察redis服务,可以看到redis cpu占用100% 用strace命令查看redis进程,显示如下: open("/ ...
- BZOJ 2173 整数的lqp拆分
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2173 题意:给出输出n.设一种拆分为n=x1+x2+x3,那么这种拆分的价值为F(x1) ...
- cdoj 1324 卿学姐与公主 线段树裸题
卿学姐与公主 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit St ...
- hibernate学习笔记6--Criteria查询方式、完整小练习(开发步骤)
一.Criteria查询方式没有sql语了,因此更加面向对象一些.Criteria是一种比HQL更面向对象的查询方式:Criteria的创建方式: Criteria c = s.createCrite ...
- Android App接入微信开放平台注意事项
一.Android第三方应用接入微信开放平台的注意事项: 1. 到微信开放平台官网申请正式的AppID(需通过审核),要填写包名.app签名的md5值.至于如何获取app签名信息,官方提供签名包apk ...
- bzoj4518
好久没写题解了…… 一开始脑抽,还以为平均数会随着划分的改变而改变(无可救药……) 这题还是比较水的,展开方差的式子分成m部分每部分路程为xi,平均数p 方差=∑(xi-p)/m=∑(xi^2-2xi ...
- 20160123.CCPP详解体系(0002天)
程序片段(01):字符.c 内容概要: 转义字符 #define _CRT_SECURE_NO_WARNINGS #include <stdlib.h> #include <stdi ...
- gridview自定义表头
gridview为我们提供了丰富的接口,用于满足自定义需求. 通常asp:gridview会根据绑定的列Columns自动生成表头,展现在前台元素. 序号 类别 有时候需要复杂一些的表头. 序号 类别 ...