C#面向对象(初级)

一、面向对象:创建一个对象,这个对象最终会帮你实现你的需求,尽管其中的过程非常曲折艰难。这也就是所谓的“你办事我放心”。
例如:
面向对象:折纸
爸爸开心地用纸折成了一个纸鹤;
妈妈不开心地用纸折成了一只小猪;
妹妹把纸变成了一朵玫瑰花。
纸作为一个对象,可以被折成纸鹤,小猪和玫瑰花,而不用关心是谁怎样折出来的。
面向对象三大特征:封装、继承、多态。
二、对象:现实中存在的事物,本质是类的实例,存在栈的一个变量。可以通过对象的属性(特征)和方法(行为)来描述这个对象。
例如:
蓝色妖姬这个对象
中文学名(属性):玫瑰花(属性值)
科(属性):蔷薇科(属性值)
颜色(属性):蓝色(属性值)
方法(行为):蓝色妖姬性喜阳光,耐寒、耐旱,适应性较强。
对象的初始化:创建好一个类的对象后,为这个对象的属性赋值的过程。
三、类:把具有相同属性和相同方法的对象进一步封装从而抽象出来的概念。类是个模型,根据类创建出来对象,并确定了对象应该具有的属性和方法。
语法:
[public] class 类名
{
字段;//字段的命名一般在前加下划线,如_name
属性;
方法;
}
1、类的实例化:创建这个类的对象的过程。其中类是不占内存而对象是占内存的。
例如:
//定义一个水果类
public class Fruit
{
//字段:存储数据
string _name; //水果的名字
string _shape;//形状
string _color;//颜色
double _weight;//重量
//方法
public void output()//输出水果的数据
{
Console.WriteLine("{0}是{1}形的,颜色是{2}色,平均重量为{3}克。", this._name, this._shape, this._color, this._weight);
}
}
class Program
{
static void Main(string[] args)
{
Fruit apple = new Fruit(); //类的实例化
apple._name = "苹果";
apple._shape = "圆";
apple._color = "无";
apple._weight = 250;
apple.output();
Console.ReadKey();
}
} //输出结果:苹果是圆形的,颜色是红色,平均重量为250克。
2、属性:对字段进行再处理,限定对字段的赋值和取值,不让外界轻易访问到字段,以达到保护字段的作用。所以一般属性是public而字段是private的,让字段只能在当前类访问。字段是不存储数据的,因为它会把数据返回给字段。
1)属性的本质就是两个方法,一个是get(),用来取值;一个是set(),用来赋值。
例如:
//把上面的水果类加入属性对字段进行保护
public class Fruit
{
//字段
string _name;
//属性
public string Name
{
get { return _name; } //当输出属性值时,执行get方法。当对get()操作时,对字段的值操作,因为此时字段已被赋值。
set { _name = value; } //当给属性赋值时,首先执行set方法。当对set()操作时,应对value操作。
}
string _shape;
public string Shape
{
get { return _shape; }
set { _shape = value; }
}
string _color;
public string Color //当水果的颜色输入为无的时候,限定_color的值为红
{
get { return _color; }
set {
if (value == "无")
{
value = "红";
}
_color = value;
}
}
double _weight;
public double Weight //当水果的重量输入小于0时,限定_weight的值为10
{
get {
if (_weight < 0)
{
return _weight = 10;
}
return _weight;
}
set { _weight = value; }
}
//方法
public void output()
{
Console.WriteLine("{0}是{1}形的,颜色是{2}色,平均重量为{3}克。", this.Name, this.Shape, this.Color, this.Weight); //当有属性时,访问的是属性而不是字段,可以与上一个例子进行比较
}
}
class Program
{
static void Main(string[] args)
{
Fruit apple = new Fruit("苹果", "圆", "无", 250); //实例化对象
apple.Name = "苹果"; //访问的是属性,此时字段已被保护
apple.Shape = "圆";
apple.Color = "无";
apple.Weight = 250;
apple.output();
Console.ReadKey();
}
}//输出结果:苹果是圆形的,颜色是红色,平均重量为250克。
2)因为属性不一定都有get()和set()这两种方法,所以又分为:
a、可读可写属性:既有get()又有set()。
b、只读属性:只有get()。
c、只写属性:只有set()。
3、静态类和非静态
静态类:当你想要把你的类当作工具类去使用,也就是会经常使用时,比如说console类。
1)静态类中只允许有静态成员,不能访问实例成员;
2)调用静态成员是,通过类名.静态成员来访问,调用简单,不用创建对象;
3)静态类在整个项目中实现资源共享,因为静态存储区域谁都可以访问;
4)当全部运行程序都结束的时候,静态类才会释放资源。因为存在垃圾回收器(GC)。
非静态类:
1)非静态类中既可以有实例成员,又可以有静态成员;
2)调用实例成员时,通过对象名.实例成员来访问;
3)实例化可以自动销毁。
4、构造函数:是一种特殊的方法,用来创建对象,可以在函数中对对象进行初始化,也就是给对象的每个属性依次赋值。
1)构造函数的名称要跟类的名称一样,修饰符必须是public;
2)构造函数没有返回值;
3)构造函数可以进行重载;
4)创建对象时执行构造函数;
5)类中会有个默认的无参数的构造函数,当写了个新的构造函数时,默认的会被替代。
例如:
public class Fruit
{
//字段
string _name;
//属性
public string Name
{
get { return _name; }
set { _name = value; }
}
string _shape;
public string Shape
{
get { return _shape; }
set { _shape = value; }
}
string _color;
public string Color
{
get { return _color; }
set {
if (value == "无")
{
value = "红";
}
_color = value;
}
}
double _weight;
public double Weight
{
get {
if (_weight < 0)
{
return _weight = 10;
}
return _weight;
}
set { _weight = value; }
}
//构造函数
public Fruit(string name, string share, string color, double weight)
{
this.Name = name;
this.Shape = share;
this.Color = color;
this.Weight = weight;
}
//构造函数的重载
public Fruit(string name, string share):this(name ,share , "" ,0) //通过:this()调用本类的构造函数
{
}
//方法
public void output()
{
Console.WriteLine("{0}是{1}形的,颜色是{2}色,平均重量为{3}克。", this.Name, this.Shape, this.Color, this.Weight);
}
}
class Program
{
static void Main(string[] args)
{
Fruit apple = new Fruit("苹果", "圆");//调用重载构造函数
//Fruit apple = new Fruit("苹果", "圆", "无", 250); //调用构造函数,想让大家了解构造函数的重载所以先注释掉
apple.output();
Console.ReadKey();
}
}//输出结果:苹果是圆形的,颜色是色,平均重量为克。(注意这个是重载构造函数)
5、析构函数
1)命名跟类名一样;
2)当程序结束时进行,可以帮助我们马上释放资源(释放对象);
3)不带修饰符或参数;
4)不能被调用,它是被动被编译器调用的;
5)一个类只能有一个解构器,不能被重载或是继承(这点跟构造函数不同);
语法:
~class()
{
// Cleaning up code goes here
}
6、关键字new
1)在内存中开辟一块空间;
2)在内存空间创建对象;
3)调用对象的构造函数对对象进行初始化(也因此构造函数的修饰符必须是public)。
7、关键字this
1)代表当前类的对象;
2)在类中显示调用本类的构造函数,语法 :this()。
参考网址:http://www.cnblogs.com/paper/archive/2009/07/31/1535998.html
C#面向对象(初级)的更多相关文章
- python 高级之面向对象初级
python 高级之面向对象初级 本节内容 类的创建 类的构造方法 面向对象之封装 面向对象之继承 面向对象之多态 面向对象之成员 property 1.类的创建 面向对象:对函数进行分类和封装,让开 ...
- python 面向对象初级篇
Python 面向对象(初级篇) 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发" ...
- python面向对象初级(七)
概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强...” 面向过程编程最易被初学 ...
- 第四篇:python 高级之面向对象初级
python 高级之面向对象初级 python 高级之面向对象初级 本节内容 类的创建 类的构造方法 面向对象之封装 面向对象之继承 面向对象之多态 面向对象之成员 property 1.类的创建 ...
- Python自动化之pickle和面向对象初级篇
pickle模块扩展 1 pickle之文件操作 示例1 with open("test", 'rb') as f: lines = f.readlines() print(pic ...
- python 面向对象 初级
面向对象 与 面向过程 面向对象对象,是根据某个对象,进行编写对象属性,不考虑对象以外的因素,只对对象本事的一些属于自己的属性进行创造,不用考虑 业务之间的逻辑. 面向过程, 是按照业务的一步步发展进 ...
- python学习之路-7 模块configparser/xml/shutil/subprocess以及面向对象初级入门
本篇记录内容 模块 configparser xml shutil subprocess 面向对象 面向对象基础 面向对象编程和函数式编程对比 面向对象中对象和类的关系 面向对象之构造方法 面向对象之 ...
- 面向对象 初级版 (Preview) 未完
概述: 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数里,日后使用无需重复编写,直接调用韩顺即可. 面向对象: 对函数进行分类和封装,让开发'更快更强' 面向对象和面向过程的通 ...
- python:面向对象初级
面向对象编程类的概念 : 具有相同属性和技能的一类事物 人类 抽象对象 : 就是对一个类的具体的描述 具体的人 具体 使用面向对象的好处: 使得代码之间的角色关系更加明确 增强了代码的可扩展性 规范了 ...
- Python之路(第二十五篇) 面向对象初级:反射、内置方法
[TOC] 一.反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它 ...
随机推荐
- 讲一讲Java的字符串常量池,看完你的思路就清晰了
前言 很多朋友Java的字符串常量池的概念困扰了很长一段时间,最近研究了一下jvm指令码,终于对它有了大概的了解. 在展示案例前,我们需要先搞清楚一个概念,众所周知,jvm的内存模型由程序计数器.虚拟 ...
- 攻克solo第六课(大调音阶与真的爱你)
在本期文章中,笔者将通过guitar pro7和大家分享大调音阶的知识. 不知道大家有没有试着使用my song book里面的谱子,反正笔者是觉得赚大了,并且找了囊括民谣.爵士到摇滚在内不同风格的谱 ...
- Javascript严格模式与一般模式的区别
严格模式是指使代码在严格条件下运行.如果你在JavaScript脚本的头部看到"use strict",那么就表明当前处于严格模式下.严格模式主要是为了消除JavaScript语法 ...
- Linux查看并杀死被占用的端口
sudo apt-get install lsof //安装lsof sudo lsof -i:端口号 //查找对应的进程号 sudo kill -9 进程号 //杀死对应的进程
- DRAM三种刷新方式(转载)
设DRAM中电容的电荷每2ms就会丢失,所以2ms内必须对其补充.补充电荷是按行来进行的,为了[全部]内存都能保住电荷,必须对[所有]的行都得补充. 假设刷新1行的时间为0.5μs(刷新时间是等于存取 ...
- Promise自定义,看我如何征服你
自定义代码 这里是我自定义的Promise,如果想看原版,可以跳过最后有符合PromiseA+规范的源码 class 承诺 { constructor(处理器函数) { //1. 处理器函数是在_ne ...
- NFS服务配置总结
目录 介绍 原理 适用场景 安装 NFS服务端 NFS客户端 配置 服务端配置 客户端配置 介绍 NFS就是Network File System的缩写,它最大的功能就是可以通过网络,让不同的机器.不 ...
- PyQt(Python+Qt)学习随笔:字体writingSystem、ProportionalFonts、MonospacedFonts的含义以及QFontComboBox字体组合框详解
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 一.引言 在介绍QFontComboBox之前,我们先简单介绍一下字体 ...
- 第12.7节 Python标准库内置模块小结
本章老猿走马观花般的介绍了一下前面没有介绍的内置模块,内容很多,介绍的很泛,介绍的目的只是让大家知道有哪些内置模块.大致的功能有哪些,以后要使用时大家可以再去详细研究.之所以采用这种方式,一是老猿时间 ...
- P5785 [SDOI2012]任务安排
本题解用于本蒟蒻加深算法印象,也欢迎大家阅读 本篇题解将分为四块,一步一步地讲解本题, Part 1: O(n^3) \(n^3\) 算法应该非常的显然,我们设 \(f_{i,j}\) 为到 \(i\ ...