纵观MicroSoft公司的几种主流语言,C是面向过程,VB既有面向过程也有面向对象的特性,而C#则是纯粹的面向对象的编程语言。在UML的学习过程中,画类图、对象图的时候面向对象的思想就已经用到了具体的学习中,而C#的学习过程中我们接着深入来学习这种思想,只不过这次是把OOP的思想用到了实际的代码编程之中。

我们知道面向对象的四个基本原则:抽象、封装、模块化、层次性;面向对象思想的编程特性:继承性、封装性、多态性。通过楚老师的视频,对面向对象的四个基本原则和编程特性都有了新的认识,这篇博客就先对其中的部分特性进行分析。

一、静态变量与非静态变量

在上一篇博客中,对C#基础的分析是以“数据”引出来的,数据中变量在程序设计中占有一席之地,那我们就从静态变量和非静态变量两个角度对它进行分析。

using system;
using  system.Collections.Generic;
using   System.text
namespace  ConsoleApplication1
{class  TestStatic{public static void main(){int k=AccessTest.x;    //此处直接使用,如果不是静态变量则写成 AccessTest myOk = newAccessTest();Console.WriteLine(k);AccessTest myOk=new AccessTest();Cosole.WriteLine(myOK.y);  //通过实例化才能访问y}}public class AccessTest{public static int x=12;public int y=12;}
}

由例子可知,在AccessTest类中定义了两个变量x和y,其中x为静态static,y为非静态,在TestStatic类的Main函数如果要分别对AccessTest类中的x和y进行访问,则对于x可以直接使用,而对于y需要首先实例化AccessTest类,然后再由该实例去调用其中的y。也就是说静态变量中的成员可以通过类名直接进行访问,而实例成员(非静态变量)必须通过建立对象的引用来访问(此处区别对象和对象引用,对象引用是一个地址而不是一个值)。我想如果x和y都定义成了非静态变量的话,那样代码量会大增的。

通过学习,对static变量有了自己的认识,但是理解的程度仅限于此,至于在代码中何处该用静态变量,还有待于在以后的学习中去探索。

二、方法

所谓的方法,就是对象的行为,在之前学习VB的时候对象有属性、事件和方法,而在真正面向对象的语言中没有事件的概念,或者说事件就是属于方法中的。

方法的句法如下:

[访问修饰符] 返回值类型  <方法名> ([参数列表])//不需要返回值时用void

{

//方法主体

}

正如上面介绍的静态变量和非静态变量那样,调用静态的方法同样无需进行实例化,而非静态的方法需要进行类的实例化之后进行调用该方法。

方法可以被重复调用即“方法重载”在C#中是一个非常重要的定义,视频中老师将其分为“具有不同数量参数的方法重载”和“对不同数据执行相似功能的方法重载”,如下:

Using System;
Namespace chognzai{Class Class1{Public int a,b;Public double x,y;Public int fun(int a,int b)  //方法名称相同,参数不同{Return a+b;}Public double fun(double x,double y) //方法名称相同,参数不同
{Return a+b;}Static void Main(string[] args){Class1 sd=new Class1();Sd.a=156;Sd.b=32;Sd.x=23.56;Sd.y=56.49;Console.WriteLine(“{0}+{1}={2}”,sd.a,sd.b,sd.fun(sd.a,sd.b));Console.writeLine(“{0}+{1}={2}”,sd.x,sd.y,sd.fun(sd.x,sd.y));Console.ReadLine();}}}

该例子中成员函数fun()被重载,属于“对不同数据执行相似功能的方法重载”,再次验证了方法是可以多次使用的这个观点。

三、属性引发的封装性的体现

先看个小例子,这是在视频中非常经典的那个交电话费的例子。

namespace Customer
{public enum TypeofCall  {callToMobile,CallTOLandLine}class Program{static void Main(string[] args){Customer tom=new Customer();tom.CustomerName="楚广明";  //设置属性的值tom.RecordCall(TypeofCall.callToMobile,20);tom.RecordCall(TypeofCall.callToLandline,40);Console.WriteLine("{0}有{1}电话费要交",tom.CustomerName,tom.customerBalance)  //读取属性的值}}public class Customer{private string name;private decimal balance;public string CustomerName  //*****属性****//{get( return name;)set (  name=value;)}public decimal CustomerBalance //****属性***//{get ( return balance;)   //只能读取余额,而不能修改}  public void RecordPayment(decimal amountpaid) //***方法*** //{balance-=amountpaid;}public void RecordCall(TypeofCall callType,uint nMinute) //***方法*** //{swistch(callType){case TypeofCall.CallToLandline:balance+=(0.02M*nMinutes); break;case TypeofCall.callToMobile:balance+=(0.3M*nMinutes);default:break;}}}
}

例子有点长,其中仅仅对属性进行分析,就像:

public string CustomerName  //*****属性****//

{

get( return name;)

set (  name=value;)

}

public decimal CustomerBalance //****属性***//

{

get ( return balance;)   //只能读取余额,而不能修改

}

这两个属性是这个例子中的Customer类实例化后tom对象的两个属性,很明显属性区别于方法就像当初学习VB一样,一个说明的是属性,另一个说的是动作。从这个例子中还能体现出面向对象封装性的思想,就像CustomerBalance属性那样,仅仅为读取属性,而没有设置属性的代码,这样我们在主程序中就不能去修改,从而保护了隐私。也就是说通过属性,将类的成员变量隔离,通过赋值、取值实现间隐藏封装的功能,这也可以看做是一种权限的限制。

通过这个小例子,OOP的封装性也就是通过其他间接的手段去操作类的成员变量,不要让别人知道你的成员变量中包含着什么,当然这里所谓的间接手段可以是上面所提到的属性,也可以是方法,前提是该方法的访问修饰符是public,通过该方法调用相同类中访问修饰符为private的成员变量或者成员方法,从而实现封装,在C#视频中有个“访问密码的最短长度(private)”的例子就是通过这个方法实现的。

总结:

在C#中面向对象的思想吗,目前仅仅是了解,需要急切去做的就是到《设计模式》的时候多去敲例子,多去回顾现在学的这些东西,带着问题去学新知识,从而实现“温故而知新”的效果。

在接下来的面向对象总结中将对“继承、多态”做浅析,期待。

C#之浅析面向对象编程思想(一)相关推荐

  1. CoreJava学习第五课 --- 进入第二阶段:面向对象编程思想

    面向对象编程思想 1.面向过程 ​ 从计算机执行角度出发 ,代码执行过程核心为从程序的运行过程出发,构建编程思路,例: 哥德巴赫猜想 // 面向过程1 用户输入一个数n2 验证数字的正确性2.1 正确 ...

  2. 面向对象编程思想概览(一)类和对象

    一.简介 生活中有许多技巧值得我们在程序设计中模仿和借鉴.采用类的思想可以方便地把具有相同属性和方法归为一类,从而简化编程.本讲利用生活的常见示例,浅显通俗的语言,生动地介绍了面向对象编程中类与对象的 ...

  3. python完全支持面向对象编程思想_面向对象的编程思想和Python的类,访问和属性,继承...

    本文将从访问限制,属性,继承,方法重写这几个方面继续介绍面向对象的编程思想和Python类的继承. 复制代码 一.访问权限: Python中在类的内部定义属性和方法,在类的外部是可以直接调用或进行访问 ...

  4. 面向对象编程思想概览(三)继承

    一.简介 本讲以大家耳熟能详的<西游记>中的唐僧师徒四人为例,介绍了类的继承的概念和实现方法,总结了继承的特性和优点,帮助同学们理解面向对象编程中继承的用法,进而掌握面向对象程序设计的基本 ...

  5. 面向对象编程思想 以及类与对象

    一.面向对象编程思想 众所周知,我们常见的编程思想有面向过程和面向对象两种,像我们最基础的c语言,就是一种以过程为中心的编程思想,不关注具体的事件和对象而是针对于解决问题的思路和目标,这种编程思想由于 ...

  6. 基于STM32F103移植华为LiteOS_任务挂起与恢复_面向对象编程思想之按键状态机

    华为LiteOS_任务挂起与恢复_面向对象编程思想之按键状态机 因为在做华为LiteOS任务挂起和恢复需要使用到按键去触发任务挂起和恢复动作,因为我就萌发出使用状态机这种架构做一个按键检测触发.回想已 ...

  7. 面向对象编程思想及入门知识

    这几天在调程序,所以想写写自己对"面向对象编程"的一些理解,希望对打算入门计算机编程的同志们有所帮助.之前,好几个师弟问过我,C++与C有什么区别,学习面向对象语言需要掌握哪些基础 ...

  8. 第三章面向对象编程思想

    """ 编码规范: 类名首字母应以大写字母开头 类的成员/属性: 成员属性 实例化对象的属性: self.name=name 可以被访问,也可以在类的外部被修改 私有属性 ...

  9. Java学习——面向对象编程思想

    目录 一. 基本概念 二. 面向对象与面向过程的区别 三. 面向对象程序设计的类与对象 3.1 对象 3.2 类 四. 面向对象的四大特征 4.1 抽象 4.2 继承 4.3 封装 4.4 多态 1) ...

最新文章

  1. Java架构技术揭秘:Redis+Nginx+Dubbo精选+面试题+精选视频(送)
  2. 安卓开发笔记——自定义广告轮播Banner(实现无限循环)
  3. FACTORY设计模式【让吃货也能理解的程序】
  4. 基于特征的对抗迁移学习论文_lt;EYD与机器学习gt;迁移学习:PTL选择式对抗网络...
  5. 敏捷开发总结(1)软件研发过程
  6. asp.net core 负载均衡集群搭建(centos7+nginx+supervisor+kestrel)
  7. Android 获取包名,版本信息及VersionName名称
  8. TFS命令tf:undo(强制签入签出文件)
  9. Spring(15)——基于注解的配置(二)
  10. python http get 请求_Python:编写HTTP Server处理GET请求
  11. 新代系统plc梯形图说明书_PLC梯形图结构和运行原理讲解,适合初学者!
  12. Windows核心编程——内存映射
  13. 转载:java生成eps
  14. Windows11 + Linux子系统(ubuntu)体验(篇一)
  15. Visio 2003 Professional 安装序列号
  16. 如何获得onblur中的值_js中onfocus、onblur事件
  17. android移动应用开发答案,Android移动应用开发习题答案.pdf
  18. web前端培训班有哪些
  19. 活动预告丨易盾CTO朱浩齐将出席2018 AIIA大会,分享《人工智能在内容安全的应用实践》...
  20. 分布式系列之分布式存储ceph初识

热门文章

  1. Qt 的 icon图标设置
  2. [论文阅读] DAE-GCN: Identifying Disease-Related Features for Disease Prediction
  3. 当设计一个APP UI的时候我们想什么...
  4. 10分钟,北大博士带你分析区块链数据安全的新方向
  5. 【前端工程化】深入浅出vite(二)--vue3全家桶+ts构建后管系统
  6. 传输层安全加密协议之Noise 协议(Noise Protocol Framework)
  7. 基于单片机的数字万用表电压、电流、电阻设计-毕业课设资料
  8. 转:一个成功的领导者,要不断培养他人成为领导者
  9. B2C电子商务系统研发——概述篇
  10. 免费查询手机号归属API地接口更新 无限制