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和==,其实可以看出很多地方都用到了上一节的值类型和引用类型.堆栈和装箱拆箱操作吧 ...
随机推荐
- linux系统主要常见目录结构
linux系统的一切从“/”开始,并按照文件系统目录标准FHS采用树桩结构来存放文件 并定义了每个区域的用途.
- weka数据挖掘拾遗(三)----再谈如果何生成arff
前一阵子写过一个arff的随笔,但是写完后发现有些啰嗦.其实如果使用weka自带的api,生成arff文件将变成一件很简单的事儿. 首先,可以先把特征文件生成csv格式的.csv格式就是每列数据都用逗 ...
- SQL经典问题 找出连续日期及连续的天数
转自:http://bbs.csdn.net/topics/360019248 如何取到每段连续日期的起始终止日期以及持续天数及起始日期距上一期终止日期的天数,能否用一句sql实现?备注:数据库环境是 ...
- Linux-0.00运行环境搭建【转】
转自:http://blog.csdn.net/rosetta/article/details/8933240 这里的Linux-0.00由Linus Torvalds写的Linux最初版本,只是打印 ...
- itnesse实现api接口自动化测试学习
上午在园子里乱逛,看了不少小伙伴们分享的接口测试方面的知识,大家所叙述到的一些经验或多或少,我也曾遇到过,突然意识到知识的点滴积累是多么的重要,我记得我最早接触接口测试的时候,就是只在浏览器里人工测试 ...
- leetcode Database3
一.Rank Scores Write a SQL query to rank scores. If there is a tie between two scores, both should ha ...
- SVG 动画实现弹性的页面元素效果
Codrops 分享了一些给SVG元素加上弹性动画的灵感.实现的思路是把一个SVG元素整合成一个组件,然后从一个路径弹性动画到另一个.这种效果可以应用到像菜单,按钮或其它元素,使得交互更有趣,看起更原 ...
- 【第六篇】javascript显示当前的时间(年月日 时分秒 星期)
不多说自己上代码 这是我开始学javascript写的,现在发出来 <span id="clock" ></span> function time() { ...
- Linux 查找文件方法
1) find -name httpd.conf 2) find /etc -name "*repo" 详情查找命令-> http://www.yesky.com/210/1 ...
- open行情
日k线 只能取8年 1分钟K线 只能取五天 前复权K线出现负数的股价 后复权K线会出现上千的股价