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和==,其实可以看出很多地方都用到了上一节的值类型和引用类型.堆栈和装箱拆箱操作吧 ...
随机推荐
- 笔者带你剖析淘宝TDDL(TAOBAO DISTRIBUTE DATA LAYER)
注:本文部分内容引用本人博客http://gao-xianglong.iteye.com/blog/1973591 前言 在开始讲解淘宝的TDDL(Taobao Distribute Data L ...
- SQL SERVER ->> BCP导出数据到平面文件
--开启xp_cmdshell sp_configure ‘show advanced options’, ; GO RECONFIGURE; GO sp_configure ‘xp_cmdshell ...
- eclipse运行mapreduce报错Permission denied
今天用在eclipse-hadoop平台上运行map reduce(word count)出错了,错误信息为 org.apache.hadoop.security.AccessControlExcep ...
- [原]poj2243-Knight Moves-水bfs
#include<iostream> #include<cstdio> #include<cstring> #include<queue> using ...
- kettle的jdk1.7环境变量配置
1).到官网下载需要安装的kettle版本,目前最新版本4.2,官网地址:http://kettle.pentaho.org,我们是使用的版本是kettle3.2 2).本地安装jdk 1.4或以上版 ...
- pyhton3多线程
from time import ctime,sleep def music(): for i in range(2): print ("I was listening to music. ...
- 【转】Android Launcher研究 (一)
这份源码是基于2.1的launcher2,以后版本虽有变化,但大概的原理一直还是保留了. 一.主要文件和类 1.Launcher.java:launcher中主要的activity. 2.DragL ...
- Java NIO读书笔记
一.Java IO与NIO区别: (1)Java NIO提供了与标准IO不同的IO工作方式: Channels and Buffers(通道和缓冲区):标准的IO基于字节流和字符流进行操作的,而NIO ...
- UVa (二分) 11627 Slalom
题意: 有宽度相同的水平的n个旗门,水平(纵坐标严格递增)滑行的最大速度为Vh(水平速度可以任意调节).然后还有S双滑雪板,每双滑雪板的垂直速度一定. 然后求能通过的滑板鞋的最大速度. 分析: 显然, ...
- 漫游Kafka设计篇之消息传输的事务定义
之前讨论了consumer和producer是怎么工作的,现在来讨论一下数据传输方面.数据传输的事务定义通常有以下三种级别: 最多一次: 消息不会被重复发送,最多被传输一次,但也有可能一次不传输. 最 ...