类和结构实际上都是创建对象的模板,每个对象都包含数据,并提供了处理和访问数据的方法 。

类定义了类的每个对象(称为实例)可以包含什么数据和功能。 例如,如 果一个类表示一个顾客,就可以定义字段 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# 类和结构的更多相关文章

  1. C#基础回顾(二)—页面值传递、重载与重写、类与结构体、装箱与拆箱

    一.前言 -孤独的路上有梦想作伴,乘风破浪- 二.页面值传递 (1)C#各页面之间可以进行数据的交换和传递,页面之间可根据获取的数据,进行各自的操作(跳转.计算等操作).为了实现多种方式的数据传递,C ...

  2. swift学习笔记3——类、结构体、枚举

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  3. java 深入技术七(类的结构和反射)

    1.java反射(reflect) java 类的结构 java反射机制就是把java类按结构分解,每一部分对应特定的反射类 java反射机制允许运行时加载,探知和使用在编译期间完全未知的classe ...

  4. 【JavaScript】获取未知类的结构

    目录结构: // contents structure [-] 为什么需要获取类的结构 关于JavaScript中的类 定义类的方法 第一种 第二种 DEMO HTML页面 date文件 注意事项 参 ...

  5. Swift3.0P1 语法指南——类和结构体

    原档:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programmi ...

  6. 【Swift学习】Swift编程之旅---类和结构体(十三)

    与其他编程语言所不同的是,Swift 并不要求你为自定义类和结构去创建独立的接口和实现文件.你所要做的是在一个单一文件中定义一个类或者结构体,系统将会自动生成面向其它代码的外部接口. 注意:通常一个类 ...

  7. swift学习笔记之-类和结构体

    //类和结构体 import UIKit //类和结构体 /* 1.枚举enum.结构体struct和String.Array.Dictionary类型,都属于值传递类型,被赋值给新的常量或变量时传递 ...

  8. swift 类和结构体

    1:类和结构体定义 类和结构体分别通过关键字class 和struct定义. swift的编码风格是类class和结构体struct名字使用大写字母开头的匈牙利表示法,相反的.类的方法和属性则用小写字 ...

  9. Swift面向对象基础(上)——Swift中的类和结构体(上)

    学习来自<极客学院> import Foundation //1.定义类和结构体 /* [修饰符]calss 类名{ 零到多个构造器 零到多个属性 零到多个方法 零到多个下标 } 修饰符可 ...

  10. C#基础知识系列三(类和结构体、String和StringBuilder、equals和==)

    前言 这一节主要来了解一下类和结构体之间的异同点.以及针对String和StringBuilder的用法.equals和==,其实可以看出很多地方都用到了上一节的值类型和引用类型.堆栈和装箱拆箱操作吧 ...

随机推荐

  1. 应用scikit-learn做文本分类

    文本挖掘的paper没找到统一的benchmark,只好自己跑程序,走过路过的前辈如果知道20newsgroups或者其它好用的公共数据集的分类(最好要所有类分类结果,全部或取部分特征无所谓)麻烦留言 ...

  2. android 四种堆状态

    总结下: ====> 建议首先阅读下面两篇文章,这样才可以更好的理解Activity的加载模式: Android的进程,线程模型 http://www.cnblogs.com/ghj1976/a ...

  3. 快速获取Windows系统上的国家和地区信息

    Windows系统上包含了200多个国家和地区的数据,有时候编程需要这些资料.以下代码可以帮助你快速获取这些信息.将Console语句注释掉,可以更快的完成分析. static void Main(s ...

  4. NandFlash详述【转】

    NandFlash详述 转自:http://wenku.baidu.com/view/04d9330bb52acfc789ebc92f.html?re=view 1. 硬件特性: [Flash的硬件实 ...

  5. 《Linux/Unix系统编程手册》读书笔记8 (文件I/O缓冲)

    <Linux/Unix系统编程手册>读书笔记 目录 第13章 这章主要将了关于文件I/O的缓冲. 系统I/O调用(即内核)和C语言标准库I/O函数(即stdio函数)在对磁盘进行操作的时候 ...

  6. 堆的 两种实现 (数组和STL)

    基本思想: 两种操作都跟树的深度成正比,所以复杂度  O(log(n)) ; push():在向堆中插入数值时,首先在堆的末尾插入该数值,然后不断向上提直到没有大小颠倒为止. pop(): 从堆中取出 ...

  7. Tuple元祖

    http://www.codeproject.com/Articles/193537/C-4-Tuples

  8. cocoStudio UI编辑器 学习总结

    一.控件 控件基类 UIWidget:所有UI控件的基类 addChild:添加UIWidget类型的节点 addRenderer:添加CCNode类型的节点 所有UIWidget,都可以设置成触摸s ...

  9. I.MX6 AT24Cxx eeprom Linux i2c-gpio

    /************************************************************************** * I.MX6 AT24Cxx eeprom L ...

  10. notebook笔记

    启动 __main__.py 静态文件 static/ 模板 templates/ 路由 比如tree/handlers.py default_handlers WebSocket ws://loca ...