在儿童班的儿童中调用方法

时间:2018-07-28 15:16:42

标签: c# .net abstract

我有三节课。首先是抽象的,它是由子类继承的,子类又被继承了。如何从抽象类的第三类调用方法?

示例代码:

CheckBox

如何从public abstract class DoSth { public void DoSomething() { Console.WriteLine("I'm doing something"); this.DoSomethingBigger(); } protected abstract void DoSomethingBigger(); } public class Writer : DoSth { protected override void DoSomethingBigger() { Console.WriteLine("I'm writting"); } } public class BookWriter : Writer { protected new void DoSomethingBigger() { Console.WriteLine("I'm writting a book"); } } 类调用DoSomethingBigger()? 当我创建BookWriter的实例并调用BookWriter时,我的输出是

DoSomething()

但我想要

I'm doing something
I'm writting

2 个答案:

答案 0 :(得分:2)

通过用exports.getAllstudentsmark = function(req, callback) { studentsmarks.find(function(error, studentsmarks_collection) { if( error ) callback(error) else { studentsmarks_collection.toArray(function(error, results) { if( error ) callback(error) else { newresult = []; for(i=0;i<results.length;i++) { getStudentName(results[i].studentid, function (studentName) { newresult.push({studentname: studentName}); }) } console.log(newresult); callback(null, newresult)} }); } }); } var getstudentObjectId = function(id) { return student.db.bson_serializer.ObjectID.createFromHexString(id); } var getStudentName = function(id, callback) { student.findOne({_id: getstudentObjectId (id)}, function(e, o){ console.log(o.name); callback(o.name); }); } 关键字标记DoSomethingBigger方法,您可以隐藏初始的new方法,而不是覆盖它。

您应该以这种方式重写代码,以使其正常工作

DoSomethingBigger

答案 1 :(得分:2)

您没有在第3类中重写该方法,基本上是在创建一个基础不知道的全新方法。有关更多信息,请参见here。就像将BookWriter中的方法名称更改为与DoSomethingElseAltogether()这样完全不同的方法一样,现在很明显,您不能从基类中调用它。

相反,您应该在第三类中重写:

public class BookWriter : Writer
{
    protected override void DoSomethingBigger()
    {
        Console.WriteLine("I'm writting a book");
    }
}