博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.Net OOP详解
阅读量:5254 次
发布时间:2019-06-14

本文共 4711 字,大约阅读时间需要 15 分钟。

什么是OOP

  OOP是开发程序中必须要使用的,而且面试的时候也经常会问到这个问题。应该很多人都知道,OOP的三大特点:封装、继承、多态。

首先,什么是OOP,OOP: Object Oriented Programming,面向对象的程序设计。所谓“对象”在显式支持面向对象的语言中,一般是指类在内存中装载的实例,具有相关的成员变量和成员函数(也称为:方法)。打个比方说,把一个人看做一个对象,那么这个人的年龄、身高、体重等等属性则为成员变量,这个人的特长、爱好(比如我打篮球很厉害)则为成员函数。

OOP的特性

OOP达到了软件工程的三个目标:重用性、灵活性和可扩展性。最后还是从OOP的三大特点封装、继承、多态中体现。

封装:类和对象本身就是封装的体现,比如说:1、属性封装了字段;2、方法的多个参数封装成一个对象;3、把一堆代码封装到一个类里面;4、把一个功能封装到几个类中。总的来说就是将一些具有相同功能的代码封装到一个程序集中,只保留部分接口和方法与外部联系。继承增加了代码的可扩展性。

继承:子类自动继承其父类中的属性和方法,并可以添加新的属性和方法或者对部分属性和方法进行重写,使子类变得更简单。继承增加了代码的重用性。

多态:多个子类中虽然都具有同一个方法,但是这些子类实例化的对象调用这些相同方法后却可以获得完全不同的结果,多态增加的代码的灵活性。

OOP思想

面向对象编程技术的关键性观念是它将数据及对数据的操作行为放在一起,作为一个相互依存、不可分割的整体——对象。对于相同类型的对象进行分类、抽象后,得出共同的特征而形成了类。面向对象编程就是定义这些类。类是描述相同类型的对象集合。类定义好之后将作为数据类型用于创建类的对象。程序的执行表现为一组对象之间的交互通信。对象之间通过公共接口进行通信,从而完成系统功能。类中声明的public成员组成了对象的对外公共接口。

案例

封装:

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6  7 namespace What_is_OOP 8 { 9     class Program10     {11         static void Main(string[] args)12         {13             Recode(new Student() { Name = "MaxJoker", Age = 22, Phone = "1808208820" });//使用对象初始化器构建一个对象闯入方法中14         }15         static void Recode(string name, int age, string phone) { } //用这种方法写调用起来麻烦16         static void Recode(Student student) { } //这里体现将方法中的多个字段封装成一个对象17 18     }19 20     class Student21     {22         public string Name { get; set; }23         public int Age { get; set; }24         public string Phone { get; set; }25     }26 27     class Person28     {29         //定义一个字段30         private int _age;31         //定义一个属性,此时属性封装了字段32         public int Age33         {34             get { return _age; }35             set36             {37                 //对年龄进行限制,这就是在调用对象是不直接使用字段的原因。38                 if (value < 0 || value > 150)39                 {40                     throw new Exception("年龄过大");41                 }42                 else43                 {44                     _age = value;45                 }46             }47         }48     }49 }
View Code

继承:继承具有单根性和传递性,单根性:只能有一个父类;传递性:比如一个方法可以从父类的父类中获取。继承的话想对好理解,就写一写怎样调用父类中的带参数的构造函数和使用this调用自己的构造函数。

1 class Person 2     { 3         public Person(string name,int age,string phone) 4         { 5             this.Name = name; 6             this.Age = age; 7             this.Phone = phone; 8         } 9         public string Name { get; set; }10         public int Age { get; set; }11         public string Phone { get; set; }12     }13 14     class Student : Person15     {16         //在子类的构造函数中通过:base()的方式,明确指明要调用父类中的那个构造函数17         public Student(string name, int age, string phone,string studentCode)18             : base(name, age, phone) //:base表示调用父类构造函数,父类中的构造函数是不能被继承的,只能通过子类去调用他19         {20             this.StudentCode = studentCode;21         }22         public string StudentCode { get; set; }23 24     }
View Code
1 class Person 2     { 3         public Person(string name, int age, string phone) 4             : this(name, age, phone, string.Empty)  //使用this调用自己的构造函数 5         { 6             //this.Name = name; 7             //this.Age = age; 8             //this.Phone = phone; 9         }10 11         public Person(string name, int age)12             : this(name, age, String.Empty, String.Empty)13         {14             //this.Name = name;15             //this.Age = age;16         }17 18         public Person(string name, int age, string phone, string email)19         {20             this.Name = name;21             this.Age = age;22             this.Phone = phone;23             this.Email = email;24         }25         public string Name { get; set; }26         public int Age { get; set; }27         public string Phone { get; set; }28         public string Email { get; set; }29     }
View Code

多态:

1 class Program 2     { 3         static void Main(string[] args) 4         { 5             Person p1=new American(); 6             Person p2=new Chinese(); 7             p1.SayNationality(); 8             p2.SayNationality(); 9             Console.ReadKey();10         }11 12     }13 14     class Person15     {16         public string Name { get; set; }17         public int Age { get; set; }18         public string Phone { get; set; }19         public string Email { get; set; }20 21         public virtual void SayNationality() { }22     }23 24     class American : Person25     {26         public override void SayNationality()27         {28             Console.WriteLine("我是美国人");29         }30     }31 32     class Chinese:Person33     {34         public override void SayNationality()35         {36             Console.WriteLine("我是中国人");37         }38     }
View Code

 

转载于:https://www.cnblogs.com/MaxJoker/p/5645558.html

你可能感兴趣的文章
洛谷 P2147 [SDOI2008]洞穴勘测 (线段树分治)
查看>>
把去世的亲友做成聊天机器人,就能让生者慰藉、死者安息吗? - 看了 寻梦历险记,我的回答是 :是的,他/她永远活在我们心里 www.iremember.com.cn...
查看>>
TCP 传输控制协议
查看>>
SAP BI学习笔记之创建数据源
查看>>
Android Studio 卡顿解决
查看>>
mysql rename
查看>>
不同方式遍历Map集合
查看>>
Machine Learning Note
查看>>
网络游戏客户端通信模块简单实现
查看>>
tomcat配置配置文件和war包进行分离
查看>>
JQuery右键菜单contextMenu插件
查看>>
Windows Mysql 5.7.15 主从复制
查看>>
听萌妹纸说,如何在微信中直接唤醒第三方App
查看>>
c#格式化数字
查看>>
jQuery.extend 函数详解
查看>>
Tokyo Cabinet和Tokyo Tyrant及PHP扩展包的安装
查看>>
拒绝访问 temp 目录。用来运行 XmlSerializer 的标识“IIS APPPOOL\UGAS”没有访问 temp 目录的足够权限...
查看>>
5.3下午
查看>>
设计模式--单一职责原则
查看>>
Java提高篇——equals()与hashCode()方法详解
查看>>