19-C#笔记-多态性
# 静态多态性
---
## 1 函数重载
和C++一样。
---
## 2 运算符重载
public
static
operator
public static Box operator+ (Box b, Box c)
{
Box box = new Box();
box.length = b.length + c.length;
box.breadth = b.breadth + c.breadth;
box.height = b.height + c.height;
return box;
}
不是所有的运算符都可以被重载。
| +, -, !, ~, ++, -- | 这些一元运算符只有一个操作数,且可以被重载。 |
| +, -, *, /, % | 这些二元运算符带有两个操作数,且可以被重载。 |
| ==, !=, <, >, <=, >= | 这些比较运算符可以被重载。 |
| &&, || | 这些条件逻辑运算符不能被直接重载。 |
| +=, -=, *=, /=, %= | 这些赋值运算符不能被重载。 |
| =, ., ?:, ->, new, is, sizeof, typeof | 这些运算符不能被重载。 |
运算符只能采用值参数,不能采用 ref 或 out 参数。
C# 要求成对重载比较运算符。如果重载了==,则也必须重载!=,否则产生编译错误。同时,比较运算符必须返回bool类型的值,这是与其他算术运算符的根本区别。
C# 不允许重载=运算符,但如果重载例如+运算符,编译器会自动使用+运算符的重载来执行+=运算符的操作。
---
# 动态多态性
---
## 3 派生/继承
abstract 抽象类,父类、基类;
* 抽象类和普通类都可以被继承,但是抽象类不能实例化;
sealed 封闭类,不能被继承;
virtual 虚方法,虚函数;
override 子类重载虚函数的时候,需要这个关键字。
abstract class Shape // abstract 可以没有,abstract表示不能实例化
{
protected int width, height;
public Shape( int a=0, int b=0)
{
width = a;
height = b;
}
public virtual int area() // 虚函数
{
Console.WriteLine("父类的面积:");
return 0;
}
}
class Rectangle: Shape
{
public Rectangle( int a=0, int b=0): base(a, b)
{ }
public override int area () // 重载虚函数 override
{
Console.WriteLine("Rectangle 类的面积:");
return (width * height);
}
}
---
参考:
http://www.runoob.com/csharp/csharp-operator-overloading.html
http://www.runoob.com/csharp/csharp-polymorphism.html
https://blog.csdn.net/t_twory/article/details/51543247
19-C#笔记-多态性的更多相关文章
- 《Python编程:从入门到实践》第19章笔记:用户/用户注册/身份验证
接上篇django最基本的一些日常用法,这是第19章笔记,希望在做"动手试一试"的时候可以让自己方便参考. 这一章实现了两个功能: 1.让用户能够添加主题Topic和条目Entry ...
- 《Java编程思想》之重点笔记——多态性理解
Java中除了static方法和final方法(private方法本质上属于final方法,因为不能被子类访问)之外,其它所有的方法都是动态绑定,这意味着通常情况下,我们不必判定是否应该进行动态绑定— ...
- iOS阶段学习第19天笔记(协议-Protocol)
iOS学习(OC语言)知识点整理 一.关于协议(Protocol)的介绍 1)概念:协议指多个对象之间协商的一个接口对象,协议提供了一些方法用在协议的实现者和代理者 之间通讯的一种方式 2) ...
- AngularJS笔记---数据绑定
一.数据绑定 1.简单绑定 下面实现了一个简单的加法运算的绑定, A.ng-app:表示该div以内都在AngularJS的应用, 去掉ng-app="" 那么后面的绑定都将无效 ...
- 19.python笔记之Rabbitmq
RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议. MQ全称为Message Queue, 消息队列(MQ)是一种应用程序 ...
- Java学习笔记——多态性Polymorphism
Java中实现多态的机制 Java中实现多态的机制靠的是父类或者接口定义的引用变量可以指向子类或者具体的实现类的实例对象,而程序调的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法,也就 ...
- 2/19 学习笔记(for in 、 del语句)
for x in ...循环就是把每个元素代入变量x,然后执行缩进块的语句 del语句作用在变量上,而不是数据对象上 列表可以修改,而字符串和元组不能
- 2019.04.19 读书笔记 比较File.OpenRead()和File.ReadAllBytes()的差异
最近涉及到流的获取与转化,终于要还流的债了. 百度了一下,看到这样的两条回复,于是好奇心,决定看看两种写法的源码差异. 先来看看OpenRead() public static FileStream ...
- 2019.03.19 读书笔记 string与stringbuilder的性能
1 string与stringbuilder 并不是stringbuilder任何时候都在性能上占优势,在少量(大约个位数)的字符串时,并不比普通string操作快. string慢的原因不是stri ...
随机推荐
- 【网络知识之四】HTTP/2
一.HTTP/1.1存在的问题 1.TCP 连接数限制2.线头阻塞 (Head Of Line Blocking) 问题3.Header 内容多,而且每次请求 Header 不会变化太多,没有相应的压 ...
- vscode java
https://devblogs.microsoft.com/visualstudio/announcing-visual-studio-code-java-installer/ public cla ...
- python 爬取媒体文件(无防火墙)
#coding = utf-8 import requests import pandas as pd import os,time root_path = './根目录/' input_file = ...
- git 删除错误提交commit(删除敏感文件)
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch test/docs/456776898979.ap ...
- Centos 7.5 安装JDK
#wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com ...
- Java8 LocalDateTime和Date相互转换
很想要用Java的时间api,但有时候还是需要转换为Date. 二者的相互转换并不是一步到位那么简单,所以,还是需要记录一下转换的api Date to LocalDateTime Date toda ...
- thinkphp3.2 无法加载模块
当使用thinkphp3.2时候 出现一个无法加载模块的错误的时候 不要慌张,只需要在根目录下的 index.php 加入一句话就可 define('BIND_MODULE','Home'); // ...
- MVC+Ninject+三层架构+代码生成 -- 总结(七、顯示層 一)
1.顯示層 在網上找的 Bootstrap 模板.
- Linq与委托
using System; using System.Linq; using System.Reflection; using Stuglxt_Models; namespace ConsoleApp ...
- 深入解析 Go 中 Slice 底层实现
原文: https://halfrost.com/go_slice/ 切片是 Go 中的一种基本的数据结构,使用这种结构可以用来管理数据集合.切片的设计想法是由动态数组概念而来,为了开发者可以更加 ...