前言
起初自己对面向对象的认识只是个大概理解,只是听说过别人都在讲以后要用面向对象思想编程,真正接触面向对象的时候才发现自己以前理解的面向对象观点是不正确的。学习面向对象首先需要明白什么是对象?常听到的回答就是万物皆对象、一切皆对象,其实是不对的。正确的对象含义其实是指具体的、特指的某一事物,在现实生活中能够看得见、摸得着的事务。
理解:
自己就是一个对象。
特征:圆脸、头发少、肤色黑、姓名、性别、年龄、身高等。特征值:身高185CM、年龄18岁。
行为:做饭、吃饭、学习、睡觉、上厕所、玩手机、打篮球等
- 属性——对象具有的各种特征
- 特征值——每个对象的每个属性都拥有特定的值
- 一个人的特征可以理解成这个人的属性
- 一个人的行为可以理解成这个人的方法
什么是类?类和对象有什么区别?
个人理解类就是一个虚幻既有代表性的一个东西。概念中,类是抽象的概念,仅仅是模板,比如说“人类”
类和对象的区别:
- 类是抽象出来的一个模板
- 对象是一个能够看得到、摸得着的一个具体实体。
- 对象可以称之为类的实例(Instance)
- 类不占内存,对象才占内存
类在C#中是如何定义的?
* 类中可以包含变量的定义和方法
类的定义语法:
[访问修饰符] class 类名
{
成员;
......
}
访问修饰符如下:
- public:公共成员,完全公开,没有访问限制。
- private:私有成员、在类的内部才可以访问。。
- protected:保护成员,在类的内部才可以访问。
- internal:当前程序集内可以访问。
例:定义一个人类,人类用三个变量来表示他的姓名、性别、年龄,有一个打招呼的方法和一个走路的方法。
public class Person
{
//加上public 访问修饰符叫字段、去掉访问修饰符就是变量。
public string _name;
public char _gender;
public int _age;
public void Hello() //打招呼方法
{
Console.WriteLine("大家好,我是一位帅哥");
}
public void Walk() //走路方法
{
Console.WriteLine("大家好,我会走路了");
}
}
类如何实例化:
语法:类 实例名 = new 类()
类的成员的访问: 实例名.属性 实例名.方法名();
属性
- 字段用public修饰的问题…用private
- 属性的定义:get; set;
- 属性是为了保护与之相对应的字段,保证字段的读取和赋值符合要求
- 属性可以分为:读写、只读、只写。
- 允许外部访问的变量一定要声明为属性。
类的构造方法
- 构造方法用来创建对象,并且可以在构造函数中对对象进行初始化。
- 构造函数是用来创建对象的特殊方法,方法名和类名一样,没有返回值,连void都不用。
- 构造函数可以有参数,new对象的时候传递函数参数即可。
- 不指定构造函数,类则有一个默认的无参构造函数。
- 指定了构造函数,则不再有默认的无参构造函数,如果需要无参构造函数,则自己需要重写。
- 构造函数可以重载,也就是有多个参数不同的构造函数。
构造函数的作用:
- 减少赋值麻烦、代码冗余。
- 变成只读 为了安全
- 变成只读后,外边就不容易赋值了。
构造函数举例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 类的构造函数
{
public class Person //定义一个人类
{
public Person(string name,char gender, int age) //构造函数
{
this._name=name;
this._gender=gender;
this._age=age;
}
private string _name;
public string Name
{
get { return _name; } //只读
}
private int _age;
public int Age
{
get { return _age; }
}
private char _gender;
public char Gender
{
get { return _gender; }
}
public void Show() //方法
{
Console.WriteLine("{0}岁的{1}在西安是最纯洁的{2}老师",_age,_name,_gender);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 类的构造函数
{
class Program
{
static void Main(string[] args)
{
Person per = new Person("小样",18,'男'); //实例化
per.Show(); //方法调用
Console.ReadKey(); //暂停
}
}
}
知识不过是一种工具,只有通过人与人之间沟通、互补,才能发挥它的全部能量。