惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
美团技术团队
Last Week in AI
Last Week in AI
WordPress大学
WordPress大学
博客园 - 三生石上(FineUI控件)
博客园 - 聂微东
雷峰网
雷峰网
阮一峰的网络日志
阮一峰的网络日志
博客园 - 叶小钗
IT之家
IT之家
Google DeepMind News
Google DeepMind News
D
Docker
J
Java Code Geeks
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - 【当耐特】
V
V2EX
Hugging Face - Blog
Hugging Face - Blog
博客园 - Franky
月光博客
月光博客
宝玉的分享
宝玉的分享
酷 壳 – CoolShell
酷 壳 – CoolShell
aimingoo的专栏
aimingoo的专栏
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - yuanws

【终极解决方案】为应用程序池“XXX”提供服务的进程在与 Windows Process Activation Service 通信时出现严重错误。该进程 ID 为“XXXX”。数据字段包含错误号。 html端编码规范 SQL对Xml字段的操作 NOSQL: mongoDB windows 更新webconfig配置文件 SQL Server中存储过程比直接运行SQL语句慢的原因 C#中使用string.Split 用字符串分隔 7个变态问题 答对4个说明你已经变态了,很悬的哦 C#时间函数的用法C#时间格式输出 程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。(C#语言) C#抽象类和抽象方法 C#中Invoke的用法 C# Thread Lambda 行变列 case [转]SqlServer四个排名函数(row_number、rank、dense_rank和ntile)的比较 SQL Server2005杂谈(2):公用表表达式(CTE)的递归调用 SQL Server2005杂谈(1):使用公用表表达式(CTE)简化嵌套SQL 改变自己的128种方法 小技巧
子类与父类的方法关系 (虚方法)
yuanws · 2011-10-18 · via 博客园 - yuanws

1.子类方法与父类方法的关系分为三种
(1)方法不同名字

(2)同名,但参数类型和数目不同(重载)

(3)方法名称和参数列表完全相同(方法的隐藏)

2.继承关系下的方法重载 

构成重载的方法具有以下特点

(1)方法名相同。

(2)方法的参数列表不同

判断第2点的标准有三点,满足任一点均可认为方法参数列表不同:

(1)参数数目不同:

(2)参数相同类型不同;

public int Add(int x,inty){……}

public double Add(double x,double y){……}

(3)参数数目和类型都相同,但参数类型出现的先后顺序不一样;

public void f(int i ,string s){……}

public void f(string s,int 1){……}

需要注意的是,方法返回值类型不是方法重载的判断条件。

如以下两个方法不能构成重载关系,VS将发生警告:

public long Add(int x,int y){……}

public int Add(int x,int y){……}

3.子类隐藏父类的方法

当子类和父类拥有完全一样的方法时,称作子类“隐藏”了父类的同名方法。需要在子类方法内加入关键字new。

1 using System;
2  using System.Collections.Generic;
3  using System.Linq;
4  using System.Text;
5
6  namespace ConsoleApplication3
7 {
8 class Program
9 {
10 static void Main(string[] args)
11 {
12 Child c1 = new Child();
13 c1.Hide();
14 Parent p1 = new Parent();
15 p1.Hide();
16 Parent p2 = new Child();//面向对象允许子类对象被当作父类对象使用
17   p2.Hide();
18 ((Child)p2).Hide();//强制类型转换
19   Console.ReadKey();
20 }
21 }
22 class Parent
23 {
24 public void Hide()
25 {
26 Console.WriteLine("我是父类!");
27 }
28 }
29 class Child:Parent
30 {
31 public new void Hide()
32 {
33 Console.WriteLine("我是子类!");
34 }
35 }
36 }

虚方法好处:
好处在多态。
调用同一个函数方法能产生不同的效果;
请看:
class A
    {
        public virtual void PrintFields() { 
        Console .WriteLine ("我是A的方法");}
    }
    class B:A  
    {
        public override void PrintFields()
        {
            Console.WriteLine("我是B的方法");
        }
    }
    class C:A 
    {
    }

        class Test
        {
            static void Main(string[] args)
            {
                A a;
                a = new B();
                a.PrintFields();//我是B的方法
                a = new C();
                a.PrintFields();//我是A的方法

            }
        }