关于C#中,继承类重写与隐藏基类方法的区别!

继承|区别

using System;
using System.Collections;

public class Nevermore60Customer:Customer
{
public override string GetFunnyString()
{
return "Nevermore60.Nevenmore!";
}

--------------------------------------------------------------------------------

public class Customer
{
public virtual string GetFunnyString()
{
return "Plain ordinary customer.Kaark!";
}
public class SamplesArray
{
public static void Main()
{
Customer Cust1=new Nevermore60Customer();
Nevermore60Customer Cust2;
// Cust1=new Customer();
Console.WriteLine("Customer referencing Customer."+Cust1.GetFunnyString());
Cust1=new Nevermore60Customer();
Console.WriteLine("Customer referencing Nevenmore60Customer:"+Cust1.GetFunnyString());
Cust2=new Nevermore60Customer();
Console.WriteLine("Nevenmore60Customer referencing"+Cust2.GetFunnyString());

}
}

Customer Cust1=new Nevermore60Customer();
如果是重写:则,如果声明的基类对象,指向的是派生类,那么这时调用的是派生类中对基本重写的方法的方法(如上所示)
如果是隐藏基类方法: public New string GetFunnyString()
{
return "Nevermore60.Nevenmore!";
}
则:Customer Cust1=new Nevermore60Customer();此时Cust1调用的仍是声明时候的基类中的GetFunnyString方法.
但二者声明与赋值都是同一个类时,不会发生这种问题.

时间: 2024-08-04 11:30:37

关于C#中,继承类重写与隐藏基类方法的区别!的相关文章

C#继承类重写与隐藏基类方法的区别

继承|区别 using System; using System.Collections; public class Nevermore60Customer:Customer { public override string GetFunnyString() { return "Nevermore60.Nevenmore!"; }   ----------------------------------------------------------------------------

本人是初学者,刚看到类的定义,为什么要隐藏基类方法啊,还有继承的成员是虚拟的什么意思啊?

问题描述 本人是初学者,刚看到类的定义,为什么要隐藏基类方法啊,还有继承的成员是虚拟的什么意思啊? 解决方案 解决方案二:有时候基类的方法不能满足需要,就要进行重写override或new,从而隐藏基类方法解决方案三:隐藏基类方法是通过在子类中用new来重新定义方法(方法名与父类的一样)虚拟的方法,是在父类中在定义方法前加上Virtul,这样在子类中可以通过Override来重写该方法(方法,参数列表一样的,但是可以实现不一样的效果)解决方案四:那隐藏基类成员和重写他们的区别是什么啊解决方案五:

关于EntityFramework中继承类的导航属性

问题描述 在entityframework中有两个实体类a,b,这两个类在数据库中都有对应的表,其中b继承a,其中b类中没有主键,b对应的数据表中的主键映射到a类的主键字段上.在b中有一个导航属性c(b为主键,c为依赖建)执行以下代码是有异常:dbContext.set<b>().include(b=>b.c);dbContext.where(b=>b.Id==1).ToList();异常信息:指定表达式的ResultType与要求的类型不兼容.表达式ResultType为&quo

重写、隐藏基类(new, override)的方法_C#教程

复制代码 代码如下: public class Father    {        public void Write() {            Console.WriteLine("父");        }    }     public class Mother    {        public virtual void Write()        {            Console.WriteLine("母");        }    }

Java中继承、多态、重载和重写介绍_java

什么是多态?它的实现机制是什么呢?重载和重写的区别在那里?这就是这一次我们要回顾的四个十分重要的概念:继承.多态.重载和重写. 继承(inheritance) 简单的说,继承就是在一个现有类型的基础上,通过增加新的方法或者重定义已有方法(下面会讲到,这种方式叫重写)的方式,产生一个新的类型.继承是面向对象的三个基本特征--封装.继承.多态的其中之一,我们在使用JAVA时编写的每一个类都是在继承,因为在JAVA语言中,java.lang.Object类是所有类最根本的基类(或者叫父类.超类),如果

如何在派生类中的隐藏基类的虚拟重载函数

我创建了一个类,基类中有虚拟重载函数.我想在派生类中改写基类中的虚拟重载函数.代码如下: #include <iostream.h>class B {private: int nNumber;public: virtual void test() { cout << "B::test()\n"; } virtual void test(int x) { nNumber = x; // 将传入的参数赋值给私有成员 cout << "B::te

Java中方法的重写与成员变量的隐藏

这篇文章讨论了Java面向对象概念中一个基本的概念–Field Hiding(隐藏成员变量) 在讨论这个问题之前,我们看一段特别特别简单的代码,请问一下方法的数据结果是什么? /**   * @author Hollis 17/9/27.   */  public class FieldOverriding {        public static void main(String[] args) {          Sub c1 = new Sub();          System.

C# 类中隐藏基类方法和Partial

原文:C# 类中隐藏基类方法和Partial 今天对于.NET开发人员来说最开心的事情莫过于微软搞开源了,这觉得是给搞.NET开发的长脸.虽然我是一个初学者,这无疑给我极大的学习动力.Fighting!!! 当一个类从父类继承了一个成员时,也就继承了它的执行代码,如果成员时虚拟的,我们可以用override重写这段执行代码.但无论他是否是虚拟的,都可以通过new 关键字来隐藏它.例如: public class BaseClass { public void DoSomething() { //

java源码-为什么jdk中的类不能被重写啊?

问题描述 为什么jdk中的类不能被重写啊? 是jvm有什么保护措施吗?我的意思就是,假设:我自己写一个String类会和jdk中的冲突,也就报错,写不了,为什么呢?跪求 解决方案 这是Java的类加载机制决定的,Java使用的是委托父类加载,所有的Java类库都是由指定的类加载器加载的,即使你定义一个一模一样的String类,最终引用加载的仍然是Java类库的类.这就是Java防止篡改的原理. 解决方案二: 当然是这样,否则很可怕了.比如说你的程序中有一个加密的逻辑,有人编写一个恶意的插件程序,