什么是面对对象
在c#学习过程中很多人会发现面对对象很抽象,所以为了更的理解我将举一些例子。
面对对象中的对象一般是具体的事物。
面对对象要的是结果。如:我打开门,打开的过程是面对过程,过程可以是多样的,如可以用脚踢,用手开。但结果都是门被打开,而面向对象就是这个门被打开的结果。对象抽象出类
类的属性
类的属性可以理解为对象的特征,如门的颜色,门的形状,等。
类的方法
类的方法可以理解为对象的行为,如:门能被打开
下面代码可以帮助理解
using System
namespace duiXiang
{
class DX
{
static void Main(string[] args)
{
student st=new student(); //创建对象
st.name="张三"; //声明函数
st.age=18;
st.behaviour();
Console.ReadKey();
}
}
class student //类的名
{
public string name; // 类的属性
public int age;
pubilc void behaviour() //类的方法即对象的行为
{
Console.WriteLine("{0}的年龄为{1},行为是学习",this.name,this.age);
}
}
}
结果是:
张三的年龄为18,行为是学习
面对对象的三大特征
1.继承
继承的特性
1.单根性:一个子类只能有一个父类。
2.传递性:可以进行代际传递。如子类的子类可以继承子类的属性也可以使用父类的属性。
基类(父类)和派生类(子类):基、派生类可以继承(也可以理解成使用)基类的数据和函数。派生类也可以有自己的数据。
基类的初始化:应该先建立父类(基类)再创建子类(派生类)。可以在在成员初始化列表中进行父类的初始化,即在基类的主体中初始化。
在考虑使用继承时,有一点需要注意,那就是两个类之间的关系应该是“属于”关系。例如,Employee 是一个人,Manager 也是一个人,因此这两个类都可以继承 Person 类。但是 Leg 类却不能继承 Person 类,因为腿并不是一个人。
using System;
namespace InheritanceApplication
{
class Shape
{
public void setWidth(int w)
{
width = w;
}
public void setHeight(int h)
{
height = h;
}
protected int width;
protected int height;
}
// 派生类(子类)
class Rectangle: Shape
{
public int getArea()
{
return (width * height);
}
}
class RectangleTester //基类(父类)
{
static void Main(string[] args)
{
Rectangle Rect = new Rectangle();
Rect.setWidth(5);
Rect.setHeight(7);
// 打印对象的面积
Console.WriteLine("总面积: {0}", Rect.getArea());
Console.ReadKey();
}
}
}
结果是:
总面积:35
注:new关键字 1.是可以创建对象 2.是可以隐藏父类
子类没有继承父类的构造函数。但子类默认调用父类无参的构 造函数
里式转换:子类可以赋值给父类
创建一个子类的对象
child c=new child();
father f=c; 或 new child();
父类可以继承子类的值。
如果一个父类装的子类的对象可以将父类强转为子类
child cc=(child)f;
cc.子类的名;
2.封装
可以用public,private,protected,internal,protected internal
等关键字来封装
public:所有对象都可以访问;
private:对象本身在对象内部可以访问;
protected:只有该类对象及其子类对象可以访问
internal:同一个程序集的对象可以访问;
protected internal:访问限于当前程序集或派生自包含类的类型
get,set可以对关键字进行封装,get,set分别对应可读,可写。
3.多态
多态性指的是同一个事件在不同对象上会有不同结果。例如面对一件事不同的人有不同的处理结果。
静态多态性。
函数的响应是在编译时发生的,也可以理解为在编译时,函数和对象的连接机制被称为早期绑定,也被称为静态绑定。
函数重载。
您可以在同一个范围内对相同的函数名有多个定义。函数的定义必须彼此不同,可以是参数列表中的参数类型不同,也可以是参数个数不同。不能重载只有返回类型不同的函数声明。
实例:
using System;
namespace PolymorphismApplication
{
public class TestData
{
public int Add(int a, int b, int c)
{
return a + b + c;
}
public int Add(int a, int b)
{
return a + b;
}
}
class Program
{
static void Main(string[] args)
{
TestData dataClass = new TestData();
int add1 = dataClass.Add(1, 2);
int add2 = dataClass.Add(1, 2, 3);
Console.WriteLine("add1 :" + add1);
Console.WriteLine("add2 :" + add2);
}
}
}
动态多态性
可以使用关键字 abstract 创建抽象类,用于提供接口的部分类的实现。 当一个派生类继承自该抽象类时,实现即完成。
抽象类包含抽象方法,抽象方法可被派生类实现。派生类具有更专业的功能。