C#不能覆盖继承的成员 [英] C# cannot override inherited member

查看:108
本文介绍了C#不能覆盖继承的成员的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在学习从命名Chegwidden Gladdis书C#。我在做相同的程序和书上写的相同的代码。但是有一个问题。我不能覆盖从父类的方法。我已经完全从readed章,5次开始的书,everyhing是一样的,但我想不通,为什么我不能不能覆盖从父类的方法。下面是从基类PassFailActivity.cs

I'm learning C# from a book named Chegwidden Gladdis. I'm making the same program and same code as written in the book. but there is a problem. i can't override a method from a parent class. I had fully readed the book from the start of chapter, 5 times, everyhing is the same but I can't figure out why I can't can't override a method from a parent class. Here's the code from the base class PassFailActivity.cs

using System;
namespace ProtectedMembers
{
    public class PassFailActivity : GradedActivity2
    {
        private double minPassingScore; // Minimum passing score

        /// <summary>
        /// The constructor sets the minimum passing score
        /// </summary>
        /// <param name="mps">The minimum passing score.</param>
        public PassFailActivity(double mps)
        {
            minPassingScore = mps;
        }

        /// <summary>
        /// The GetGrade method returns a letter grade determined
        /// from the score field. This methos overrides the base class method.
        /// </summary>
        /// <returns>The letter grade</returns>
        public override char GetGrade()
        {
            char letterGrade;

            if (base.GetScore() >= minPassingScore)
                letterGrade = 'P';
            else
                letterGrade = 'F';

            return letterGrade;
        }
    }
}

和GradedActivity2.cs

and GradedActivity2.cs

using System;

namespace ProtectedMembers
{
    public class GradedActivity2
    {
        protected double score; // Numberic score

        /// <summary>
        /// The SetScore method sets the score field.
        /// </summary>
        /// <param name="s">The value to store in score</param>
        public void SetScore(double s)
        {
            score = s;
        }

        /// <summary>
        /// The GetScore method returns the score.
        /// </summary>
        /// <returns>The value stored in the score field</returns>
        public double GetScore()
        {
            return score;
        }

        /// <summary>
        /// The GetGrade method returns a letter grade determined from the score field.
        /// </summary>
        /// <returns>Return the letter grade</returns>
        public char GetGrade()
        {
            char letterGrade;

            if (score >= 90)
                letterGrade = 'A';
            else if (score >= 80)
                letterGrade = 'B';
            else if (score >= 70)
                letterGrade = 'C';
            else if (score >= 60)
                letterGrade = 'D';
            else
                letterGrade = 'F';

            return letterGrade;
        }
    }
}

和PassFailExam

and PassFailExam

using System;

namespace ProtectedMembers
{
    public class PassFailExam : PassFailActivity
    {
        private int numQuestions; // Number of questions
        private double pointsEach; // Points for each question
        private int numMissed; // Number of questions missed

        /// <summary>
        /// The constructor sets the number of questions, the number
        /// of questions missed, and the minimum passing score.
        /// </summary>
        /// <param name="questions">The number of questions</param>
        /// <param name="missed">The number of questions missed</param>
        /// <param name="minPassing">The minimum passing score</param>
        public PassFailExam(int questions, int missed, double minPassing) : base(minPassing)
        {
            // Declare a local variable for the score.
            double numericScore;

            // Set the numQuestions and numMissed fields.
            numQuestions = questions;
            numMissed = missed;

            // Calculate the points for each questions and the numeric score for this exam.
            pointsEach = 100.0 / questions;
            numericScore = 100.0 - (missed * pointsEach);

            // Call the base class's SetScore method to set the mumeric score.
            SetScore(numericScore);
        }

        /// <summary>
        /// The GetpointsEach method returns the number of points each questions is worth
        /// </summary>
        /// <returns>The value in the pointsEach field</returns>
        public double GetPointsEach()
        {
            return pointsEach;
        }

        /// <summary>
        /// The GetNumMissed method returns the number of questions missed
        /// </summary>
        /// <returns>The value in the numMissed field</returns>
        public int GetNumMissed()
        {
            return numMissed;
        }
    }
}

和这里是我的主

using System;

namespace ProtectedMembers
{
    public class PassFailExamDemo
    {
        public static void Main111()
        {
            int questions, // Number of questions
                missed; // Number of questions missed
            double minPassing; // Minmum passing score

            // Get the number of questions on the exam
            Console.Write("How many questions are " + "on the exam? ");
            questions = Convert.ToInt32(Console.ReadLine());

            // Get the number of questions missed.
            Console.Write("How many questions did " + "the student miss? ");
            missed = Convert.ToInt32(Console.ReadLine());

            // Get the minimum passing score
            Console.Write("What is the minimum " + "passing score? ");
            minPassing = Convert.ToInt32(Console.ReadLine());

            // Create a PassFailExam project
            PassFailExam exam = new PassFailExam(questions, missed, minPassing);

            // Display the teset results.
            Console.WriteLine("Each questions counts {0} points.",
                exam.GetPointsEach());
            Console.WriteLine("The exam score is {0} ",
                exam.GetScore());
            Console.WriteLine("The exam grade is {0} ",
                exam.GetGrade());
            Console.ReadLine();
        }
    }
}



输出应该是

the output should be

How many questions are on the exam? 100
How many questions did the student miss? 25
What is the minimum passing score? 60
Each question counts 1 points.
The exam score is 75
The exam grade is P



我曾尝试使基虚拟方法,并试图覆盖它,这只是让我这个错误'ProtectedMembers.PassFailActivity.GetGrade()调用时覆盖:不能覆盖继承成员ProtectedMembers.GradedActivity2.GetGrade()',因为它没有标记虚拟,抽象或覆盖。我全面检查

I have tried to make the base method virtual and calling override when trying to override it and that just gets me this error "'ProtectedMembers.PassFailActivity.GetGrade()': cannot override inherited member 'ProtectedMembers.GradedActivity2.GetGrade()' because it is not marked virtual, abstract, or override". i fully checked

推荐答案

该错误是不言自明,标志着该函数的 虚拟 GradedActivity2

The error is self-explanatory, mark the function virtual in GradedActivity2:

public virtual char GetGrade()

从MSDN:

虚拟关键字用于修改的方法,属性,索引,或者
事件的声明,并允许它在派生
类重写。

The virtual keyword is used to modify a method, property, indexer, or event declaration and allow for it to be overridden in a derived class. For example, this method can be overridden by any class that inherits it:

这篇关于C#不能覆盖继承的成员的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆