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和==,其实可以看出很多地方都用到了上一节的值类型和引用类型.堆栈和装箱拆箱操作吧 ...
随机推荐
- VNC常用操作及常见问题解决办法汇总
VNC登录用户缺省是root,但在安装oracle时必须用oracle用户的身份登录,下面我们就以oracle为例说明如何配置VNC,从而可以使用不同的用户登录到主机.步骤描述如下: 步骤一:修 ...
- 着色器(Shader)
着色器(Shader) 顶点着色器(Vertex shader) 片段着色器(Fragment shader) 几何着色器(Geometry Shader) 提供通用计算能力的着色器(Compute ...
- java获取当前月第一天和最后一天,上个月第一天和最后一天
package com.test.packager; import java.text.ParseException; import java.text.SimpleDateFormat; impor ...
- 关于何时view.setLayoutParams(params);
1,从view得到LayoutParams params LayoutParams params = view.getLayoutParams(); 2,可以从用params.height得到当前v ...
- JavaScript 类的定义和引用 JavaScript高级培训 自定义对象
在Java语言中,我们可以定义自己的类,并根据这些类创建对象来使用,在Javascript中,我们也可以定义自己的类,例如定义User类.Hashtable类等等. 一,概述 在Java语言中 ...
- 【笨嘴拙舌WINDOWS】GDI对象之位图
GDI对象在windows中可以描述成为一次绘画操作时可使用的抽象工具.包括(画笔.画刷.字体.区域.调色板.位图等) GDI对象里的对象概念和在编程领域中面向对象编程的对象概念是不一样的! GDI对 ...
- HDU 1317 XYZZY【Bellman_Ford判断正环】
题意:给出n个房间,初始在房间1有100的能量值,每次进入一个房间,能量值可能增加也可能减小,(是点权,不是边权),问能否到达终点的时候能量值还为正 这题自己写的时候wa--wa-- 后来看了题解,还 ...
- HDU 2544 最短路【Bellman_Ford 】
题意:给出n个节点,m条边,问从起点到终点的最短距离 用bellman_ford,注意是无向图 初学bellman_ford= =一点点理解 因为dijkstra是每次用集合里面的点去更新它们所连接的 ...
- 使用MFC中的AfxBeginThread创建多线程
创建一个基于对话框的工程,工程名为CreateThreadRect 在CreateThreadRect.cpp中增加一个ThreadProc函数,代码如下 工作者线程的函数必须是全局函数或静态 ...
- Servlet的延迟加载和预加载
我们什么时候使用了延迟加载呢? 先从hibernate引入这个概念吧. hibernate使用lazy属性设置延迟加载,load方法会使用延迟加载. 举个例子: 一个学生有多部手机,如果使用了延迟加载 ...