C#封装、多态、抽象、接口、匿名方法等学习
1:封装
将对象进行封装,并不等于将整个对象完全包裹起来,而是根据实际需要,设置一定的访问权限,用户根据不同的权限调用对象提供的功能,在C#语言中,可以使用修饰符public、internal、protected、private分别修饰类的字段、属性和方法。
2:继承,主要是注意继承的格式
- public class ParentClass //父类
- {
- public ParentClass();
- }
- public class ChildClass : ParentClass :子类
- {
- public ChildClass();
- }
3:多态
多态是面向对象编程思想的核心之一,多态的意思是:当从父类派生出了一些子类后,每个子类都由不同的代码实现,因此,同样的调用可以产生不同的效果,主要由子类来决定,在程序运行时,面向对象的语言会自动判断对象的派生类型,并调用相应的方法。
在C#中多态分为两种类型,即编译时多态和运行时多态,编译时多态是通过重载来实现的,运行时多态是系统运行时根据实际情况来决定何种操作。
实例代码:
- public class MyIntertest
- {
- public virtual void interest()
- {
- Console.WriteLine("我的爱好");
- Console.ReadLine();
- }
- }
- public class Writer : MyIntertest
- {
- public override void Interest()
- {
- Console.WriterLine("写作");
- }
- }
- public class Program : MyInterest
- {
- public override void interest()
- {
- Console.WriteLine("编程");
- }
- }
- public class Sing : MyInterest
- {
- public override void interest()
- {
- Console.WriteLine("唱歌");
- }
- }
- public class Test
- {
- public static int main(String[] args)
- {
- MyInterest[] interests = new MyInterest[4];
- interests[0] = new Write();
- interests[1] = new Program();
- interests[2] = new Sing();
- interests[3] = new MyInterest()
- foreach ( MyInterest interest in interests)
- {
- interest.interest();
- }
- return 0;
- }
- }
4:
接口: 界面,是两个有界事物的交界处,通过界面可以与对方交互,交互的方式由约定产生,这种约定就是由具体交互动作的规则,只要遵循规则 即可与拥有规则的事物交互。 在C#中,接口是声明类具有的方法和成员的、自身不能被实例化的、只能被继承的特殊的类,其只管描述事物的特性而实现特性的任务却由其他类负责。 接口中不能包含字段 接口定义了类要实现的一系列方法,但是它本身不能实现这些方法,只是用逻辑结构方式来描述。 在接口的成员中,只能是方法、属性、事件或者索引器,它的成员不能包含常数、字段、运算符、实例构造函数、析构构造函数或类型,也不能包含任意种类的 静态成员。
- interface MyInterface
- {
- string STR //属性STR
- {
- get; //属性可读
- set; //属性可写
- }
- void outMethod(); //成员方法outMethod
- }
- class InheritInterface : MyInterface
- {
- string str = "21天学习C#"; //定义并初始化字符串
- public string STR
- {
- get
- {
- return str;
- }
- set
- {
- str = value;
- }
- }
- public void outMethod()
- {
- Console.WriteLine(this.STR);
- }
- }
5: 域和属性 域也叫成员变量,它可以用来保存类的各种信息,域可以分为静态域和实例域两种,其中,静态域属于类,实例域属于对象。 属性是一种用来访问对象的特殊成员。 域的声明:和普通变量相同,可以用new, public, protected, static和readonly等
- public class Date
- {
- private string name = "hoan";
- public string nameAttr
- {
- get //使用get访问器读值
- {
- return name;
- }
- set //使用set访问器写值
- {
- }
- }
- }
6:匿名方法:
匿名方法的作用是将代码块当作参数来使用,使代码对于委托的实例很直接,很便利,可以减少实例化委托对系统资源的开销。匿名方法还共享了
本地语句包含的函数成员访问权限。
匿名方法的使用:
- namespace codemo
- {
- delegate void Writer(string s); //委托所调用的命名方法
- class Program
- {
- static void NamedMethod(string k) //委托所调用的命名方法
- {
- System.Console.WriteLine(k);
- }
- static void Main(string[] args)
- {
- Writer w = delegate(string j) //委托类调用匿名方法
- {
- System.Console.WriteLine(j);
- }
- w("调用了匿名方法");
- Console.WriteLine();
- w = new Writer(NamedMethod); //创建对象
- w("调用了命名方法"); //调用命名方法
- Console.ReadLine();
- }
- }
- }
C#封装、多态、抽象、接口、匿名方法等学习的更多相关文章
- JAVA 之 多态 抽象 接口
一:多态 1:多态 一个对象有多种形式的能力 2:步骤 1编写父类派生子类 2子类重写父类方法 3用父类的数据类型引用子类对象 3:静态多态的实现方式就是方法重载 4:动态多态的实现方式就是重写 ...
- java匿名内部类,多态,接口练习
1多态以及接口调用方法: public class Interface { public static void main(String[] args) { Al x = new Al(); jian ...
- 匿名方法与Lambda表达式
1.匿名方法 在学习委托时,我们知道委托实例至少要绑定一个方法才能使用,而调用委托实际上是调用了它所关联地方法.一般来说,需要定义一个与委托签名相符的方法,并使之与委托变量关联.如以下代码: Acti ...
- C#属性-索引器-里氏替换-多态-虚方法-抽象-接口-泛型-
1.属性 //属性的2种写法 public class person { private string _name; public string Name { get { return _name; ...
- Java—继承、封装、抽象、多态
类.对象和包 1) 面向对象编程(Object Oriented Programming ,简称 OOP):20世纪70年代以后开始流行. 2) 结构化编程与面向对象编程的区别: A. 在结构化编程中 ...
- java四大特性理解(封装继承多态抽象)
封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的接口.面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治.封装的对象,这些对象通过一个受保护的接口访问其他对象.封装是一 ...
- Java知识回顾 (7) 继承、多态与接口、封装
一.继承 1.1 继承的特性 子类拥有父类非 private 的属性.方法. 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展. 子类可以用自己的方式实现父类的方法. Java 的继承是单继承, ...
- 七:Java之封装、抽象、多态和继承
本文章介绍了关于Java中的面向对象封装.抽象.继承.多态特点 Java面向对象主要有四大特性:封装.抽象.继承和多态. 一.封装 封装就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的总体, ...
- java中封装,继承,多态,接口学习总结
### 一:封装java中封装是指一种将抽象性函式接口的实现细节部分包装.隐藏起来的方法. 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问.要访问该类的代码和数据,必须通 ...
随机推荐
- IRequiresSessionState和IReadOnlySessionState应用上的一些差异
在调用ashx时,如果需要应用Session,则必须继承接口 IRequiresSessionState,IReadOnlySessionState,但根据字面,可以知道 IRequiresSessi ...
- java 获取当前时间及年月日时分秒
java代码如下: package test; import java.text.SimpleDateFormat; import java.util.Calendar; import java.ut ...
- 一个有趣的模拟光照的shader(类似法线贴图)
最近使用unity,碰到到一个很有趣的例子.场景无光线,却模拟出了光照,效果挺好.其思路与法线贴图原理异曲同工. 原作者提供的效果印象深刻. 模型除了使用原来的diffuse贴图外,还用到了一张模拟记 ...
- python在linux上的GUI无法弹出界面
在进行python写GUI程序的时候,使用Tkinter,发现无法执行程序,报错如下: X connection to localhost:10.0 broken(explicit kill or s ...
- CentOS7 安装 scala 2.11.1
wget http://downloads.typesafe.com/scala/2.11.6/scala-2.11.6.tgz?_ga=1.61986863.2013247204.144801902 ...
- 30个有关Python的小技巧
从我开始学习python的时候,我就开始自己总结一个python小技巧的集合.后来当我什么时候在Stack Overflow或者在某个开源软件里看到一段很酷代码的时候,我就很惊讶:原来还能这么做!,当 ...
- PV3D学习笔记-导入DAE模型
网上关于PV3D导入DAE模型的例子都非常多,可惜我研究了半天,一个都没成功,或者是破面问题,或者是贴图不显示,再或者贴图乱掉了.今天晚上终于搞定,心得发上来. 制作模型的软件是SketchUp ...
- 【360开源】thinkjs:基于Promise的Node.js MVC框架 (转)
thinkjs是360奇舞团开源的一款Node.js MVC框架,该框架底层基于Promise来实现,很好的解决了Node.js里异步回调的问题.360奇舞团(奇虎75Team),是奇虎360公司We ...
- MVC中使用AuthorizeAttribute做身份验证操作
代码顺序为:OnAuthorization-->AuthorizeCore-->HandleUnauthorizedRequest 如果AuthorizeCore返回false时,才会走H ...
- RAD XE10 Seattle
RAD Studio 10 Seattle RAD XE10 Seattle RAD 10 Seattle c++builder 10 Seattle Delphi 10 Seattle http:/ ...