C# 重载

C# 重载

允许重载静态方法

public class A
{
	public static void X() { }
	public void X(string a) { }
}

public class B :A
{
	public void X(string a, string b) { }
}

重载, 多态, 泛型, 泛函

多态有两种实现方式: 覆写, 重载.
重载不是面向对象技术. 泛型也不是.
没有晚绑定, 就没有多态.

对于同一个名称的方法/函数:
覆写, 使同一类型, 有不同的行为. 因为存在子类型.
重载, 使不同类型, 有不同行为.
泛型, 使不同类型, 有同样的行为.

重载实际不能实现多态, 它是早绑定的. 调用方法之前, 已经清楚知道类型了, 清楚知道方法签名. 等同于名称不同的方法. 它对付不了 if 语句.

覆写一次只能对付一个数据, 即 this. 对于一个以上数据, 只能把 if 藏在方法之中, 再分发给重载方法, 从外面看貌似继续多态了.

泛型, 早绑定, 实现晚绑定功能. 所以它也不能多态. Lisp 中的宏能够实现泛型.

伪泛型, 把不同类型数据用相同接口封装, 或者说用不同派生类封装, 统一基类, 能实现泛型功能, 只不过代码要多一些. 对于基础值类型, 则只有用Object+造型了.

泛函, 对比面向对象, 闭包相当于一个对象, 只有一个公共方法, 其余所有成员私有, 有不受数量限制的私有的属性和方法. 类型, 只有一个相当于Object 的类型. 显然是多态的, 不同的闭包覆写了唯一的公共方法. 它是晚绑定.

面向对象语言只需再多那么一点点语法糖, 也能实现函数的第一公民身份, 这样想来, 以后对泛函也不用那么执着.

像 Lisp 的那种宏还真是好东西.

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论 1

打赏作者

三个光

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值