C# 图解教程 第四章 类的基本概念
类的基本概念
类的概述
类是一种活动的数据结构
在面向对象分析和设计产生前,程序员仅把程序当做指令的序列。那时的焦点在指令的组合和优化上。
随着面向对象的出现,焦点转移到组织程序的数据和功能上。
程序的数据和功能被组织为逻辑上相关的数据项和函数的封装集合,并被称为类。
类是一个能存储数据并执行代码的数据结构。包含数据成员和函数成员。
- 数据成员:存储与类或类的实例相关的数据。数据成员通常模拟现实世界事物的特性
- 函数成员:执行代码。通常模拟现实世界事物的功能和操作
类是逻辑相关的数据和函数的封装,通常代表真实世界中或概念上的事物。

声明类
类的声明定义新类的特征和成员。它并不创建类的实例,但创建了用于创建实例的模板。
- 类的名称
- 类的成员
- 类的特征
关键字 类名
↓ ↓
class MyExcellentClass
{
成员声明
}
类成员
字段和方法是最重要的类成员类型。
字段是数据成员,方法是函数成员。
字段
字段隶属于类的变量
- 它可以是任何类型,无论预定义类型还是用户定义类型
- 和所有变量一样,字段用于保存数据
- 可以被写入
- 可以被读取
class MyClass
{
类型 字段名称
↓ ↓
int MyField
}
方法
方法是具有名称的可执行代码块。
方法声明包括以下组成部分
- 返回类型
- 名称
- 参数列表
- 方法体
class SimpleClass
{
返回类型 参数列表
↓ ↓
void PrintNums()
{
Console.WriteLine("");
}
}
创建变量和类的实例
类的声明只用于创建类的实例的模板。一旦类被声明,就可以创建类的实例。
- 类是引用类型,这意味着它们要为数据引用和实际数据都申请内存
- 数据的引用保存在一个类类型的变量中。所以,要创建类的实例,需要从声明一个类类型的变量开始。如果变量没有被初始化,它的值是未定义的

为数据分配内存
声明类类型的变量所分配的内存是用来保存引用的,而不是类对象实际数据。
要为实际数据分配内存,需要使用new运算符。
- new运算符为任意指定类型的实例分配并初始化内存。它依据类型的不同从栈或堆里分配
- 使用new运算符组成一个对象创建表达式
- 关键字 new
- 要分配内存的实例的类型名称
- 成对的圆括号,可能包括参数或无参数
- 如果内存分配给一个引用类型,则对象创建表达式返回一个引用,指向在堆中被分配并初始化的对象实例
Dealer theDealer; //声明引用变量
theDealer = new Dealer();//为类对象分配内存并赋给变量

实例成员
类声明相当于模板,通过这个模板想创建多少个类的实例都可以。
- 实例成员:类的每个实例都是不同的实体,它们有自己的一组数据成员,不同于同一类的其他实例。因为这些数据成员都和类的实例相关,所以被称为实例成员
- 静态成员:静态成员是与类相关的成员,静态成员被加载到静态存储区,且只被创建一次,类的所有实例共享静态成员
访问修饰符
类的内部,成员间可以任意访问。
访问修饰符,指明外部程序如何访问类中的成员。
字段
访问修饰符 类型 标识符;
方法
访问修饰符 返回类型 方法名()
{
...
}
五种访问修饰符
- 私有的(private)
- 公有的(public)
- 受保护的(protected)
- 内部的(internal)
- 受保护内部的(protected internal)
私有访问和公用访问
- 私有访问是默认的访问级别
- 实例的公有成员可以被程序中的其他对象访问

class C1
{
int F1; //隐式私有字段
private int F2; //显示私有字段
public int F3; //公有字段
void DoCalc() //隐式私有方法
{
...
}
public int GetVal()//公用方法
{
...
}
}

从类的内部访问成员
类的成员仅用其他类成员的名称就可以访问它们
class DaysTemp
{
//字段
private int High = ;
private int Low = ;
//方法
private int GetHigh()
{
return High;
}
private int GetLow()
{
return Low;
}
public float Average()
{
return (GetHigh()+GetLow())/;//访问私有方法
}

从类的外部访问成员
要从类的外部访问实例成员,必须包括变量名称和成员名称,中间用.(dot-syntax notation 点运算符)分隔。
DaysTemp myDt = new DaysTemp(); //创建类的对象
float fValue = myDt.Average(); //从外部访问
综合应用
下面代码创建两个实例并把它们的引用保存在名称为t1和t2的变量中。
这段代码示范了目前位置讨论的使用类的3种行为
- 声明一个类
- 创建类的实例
- 访问类的成员(写入字段、读取字段)
class DaysTemp //声明类
{
public int High,Low; //声明实例字段
public int Average() //声明实例方法
{
return(High+Low)/;
}
}
class Program
{
static void Main()
{
//创建两个实例
DaysTemp t1 = new DaysTemp();
DaysTemp t2 = new DaysTemp();
//给字段赋值
t1.High = ;
t1.Low = ;
t2.High = ;
t2.Low = ;
//读取字段值
//调用实例方法
Console.WriteLine("t1:{0},{1},{2}",t1.High,t1.Low,t1.Average());
Console.WriteLine("t2:{0},{1},{2}",t2.High,t2.Low,t2.Average());
}
}

C# 图解教程 第四章 类的基本概念的更多相关文章
- C#图解教程 第七章 类和继承
类和继承 类继承访问继承的成员所有类都派生自object类屏蔽基类的成员基类访问使用基类的引用 虚方法和覆写方法覆写标记为override的方法覆盖其他成员类型 构造函数的执行 构造函数初始化语句类访 ...
- [Learn Android Studio 汉化教程]第四章 : Refactoring Code
[Learn Android Studio 汉化教程]第四章 : Refactoring Code 第四章 Refactoring Code 重构代码 在Android Studio中开发,解决 ...
- [Effective Java]第四章 类和接口
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- Blend4精选案例图解教程(四):请给我路径指引
原文:Blend4精选案例图解教程(四):请给我路径指引 路径在界面设计中,可以起到很好的辅助作用,我常常使用它来对元素进行规则排列和非规则排列控制. 本次教程将演示,Blend中路径的常规用法. 1 ...
- [ABP教程]第四章 集成测试
Web应用程序开发教程 - 第三章: 集成测试 //[doc-params] { "UI": ["MVC","NG"], "DB& ...
- 2018-06-20 中文代码示例视频演示Python入门教程第四章 控制流
知乎原链 续前作: 中文代码示例视频演示Python入门教程第三章 简介Python 对应在线文档: 4. More Control Flow Tools 录制中出了不少岔子. 另外, 输入法确实是一 ...
- python 教程 第四章、 控制流
第四章. 控制流 控制语句后面要加冒号: 1) if语句 if guess == number: print 'Congratulations, you guessed it.' # New b ...
- Cobalt Strike系列教程第四章:文件/进程管理与键盘记录
Cobalt Strike系列教程分享如约而至,新关注的小伙伴可以先回顾一下前面的内容: Cobalt Strike系列教程第一章:简介与安装 Cobalt Strike系列教程第二章:Beacon详 ...
- C#图解教程 第六章 深入理解类
深入理解类 类成员成员修饰符的顺序实例类成员静态字段从类的外部访问静态成员 静态字段示例静态成员的生存期 静态函数成员其他静态类成员类型成员常量常量与静态量属性 属性声明和访问器属性示例使用属性属性和 ...
随机推荐
- jQuery源码研究——解决命名冲突
在项目中难免不去使用多个插件,如此一来这些插件就有可能出现一样的名称,当出现同名变量时后一个将会覆盖上一个,这样的话我们就无法同时使用多个插件了. 当遇到这种情况我们可以手动去修改插件源码把它的名字改 ...
- Javascript Sting(字符串)对象
一, 如何计算字符串的长度? 可以通过.length属性来计算 <script type="text/javascript"> var txt="Hello ...
- Maven下的SpringMVC MyBatis
从头开始采用Maven管理,Spring.MyBatis.Tomcat. 在配置过程中SQL Server的Jar老是加载不了,解决方案参考前一篇博文. eclipse中已经自带了Maven的插件所以 ...
- WPF ----在UserControl的xaml里绑定依赖属性
场景:在定义wpf 用户控件的时候,希望使用时设置自定义的属性来改变用户控件里的状态或内容等. 下面直接上实例代码: 用户控件的后台代码,定义依赖属性 public partial class MyU ...
- Tomcat服务器的配置
本地安装的Tomcat服务器版本是 Apache Tomcat/7.0.42 启动 localhost 使用Tomcat的前提是安装了jdk,我在本地安装了jdk7.Tomcat服务器的文件目录为F: ...
- Python自动化--语言基础4--模块、文件读写、异常
模块1.什么是模块?可以理解为一个py文件其实就是一个模块.比如xiami.py就是一个模块,想引入使用就在代码里写import xiami即可2.模块首先从当前目录查询,如果没有再按path顺序逐一 ...
- 测试任务汇总v1.0
2017.08.04 整理了目前我们所在团队需要做的日常任务 定义为v1.0
- 编程中&和&&的区别
逻辑电路中用&: 与门电路,全真为真,有假为假. 编程中:&表示取地址符(C)和 按位与(非bool类型时,转换成二进制,按位与运算). &&表示逻辑与运算,& ...
- URAL - 1153 Supercomputer 大数开方
题意:给定m,m = n * (n+1) / 2,计算n值. 思路:n = SQRT(m*2) 注意m很大,需要自己实现大数开方.我用的是自己写的大数模板:大数模板 AC代码 #include < ...
- 记录 serverSocket socket 输入,输出流,关闭顺序,阻塞,PrintWriter的一些问题.
关于socket.getOutputStream() 的一些问题, OutputStream的flush是一个空方法,所以需要另一个实现了Flush的流来包装一下 这里为什么使用PrintWriter ...