title: C# cannot override inherited member
body: <p>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</p>
  
  <pre><code>using System;
  namespace ProtectedMembers
  {
      public class PassFailActivity : GradedActivity2
      {
          private double minPassingScore; // Minimum passing score
  
          /// &lt;summary&gt;
          /// The constructor sets the minimum passing score
          /// &lt;/summary&gt;
          /// &lt;param name="mps"&gt;The minimum passing score.&lt;/param&gt;
          public PassFailActivity(double mps)
          {
              minPassingScore = mps;
          }
  
          /// &lt;summary&gt;
          /// The GetGrade method returns a letter grade determined
          /// from the score field. This methos overrides the base class method.
          /// &lt;/summary&gt;
          /// &lt;returns&gt;The letter grade&lt;/returns&gt;
          public override char GetGrade()
          {
              char letterGrade;
  
              if (base.GetScore() &gt;= minPassingScore)
                  letterGrade = 'P';
              else
                  letterGrade = 'F';
  
              return letterGrade;
          }
      }
  }
  </code></pre>
  
  <p>and GradedActivity2.cs</p>
  
  <pre><code>using System;
  
  namespace ProtectedMembers
  {
      public class GradedActivity2
      {
          protected double score; // Numberic score
  
          /// &lt;summary&gt;
          /// The SetScore method sets the score field.
          /// &lt;/summary&gt;
          /// &lt;param name="s"&gt;The value to store in score&lt;/param&gt;
          public void SetScore(double s)
          {
              score = s;
          }
  
          /// &lt;summary&gt;
          /// The GetScore method returns the score.
          /// &lt;/summary&gt;
          /// &lt;returns&gt;The value stored in the score field&lt;/returns&gt;
          public double GetScore()
          {
              return score;
          }
  
          /// &lt;summary&gt;
          /// The GetGrade method returns a letter grade determined from the score field.
          /// &lt;/summary&gt;
          /// &lt;returns&gt;Return the letter grade&lt;/returns&gt;
          public char GetGrade()
          {
              char letterGrade;
  
              if (score &gt;= 90)
                  letterGrade = 'A';
              else if (score &gt;= 80)
                  letterGrade = 'B';
              else if (score &gt;= 70)
                  letterGrade = 'C';
              else if (score &gt;= 60)
                  letterGrade = 'D';
              else
                  letterGrade = 'F';
  
              return letterGrade;
          }
      }
  }
  </code></pre>
  
  <p>and PassFailExam</p>
  
  <pre><code>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
  
          /// &lt;summary&gt;
          /// The constructor sets the number of questions, the number
          /// of questions missed, and the minimum passing score.
          /// &lt;/summary&gt;
          /// &lt;param name="questions"&gt;The number of questions&lt;/param&gt;
          /// &lt;param name="missed"&gt;The number of questions missed&lt;/param&gt;
          /// &lt;param name="minPassing"&gt;The minimum passing score&lt;/param&gt;
          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);
          }
  
          /// &lt;summary&gt;
          /// The GetpointsEach method returns the number of points each questions is worth
          /// &lt;/summary&gt;
          /// &lt;returns&gt;The value in the pointsEach field&lt;/returns&gt;
          public double GetPointsEach()
          {
              return pointsEach;
          }
  
          /// &lt;summary&gt;
          /// The GetNumMissed method returns the number of questions missed
          /// &lt;/summary&gt;
          /// &lt;returns&gt;The value in the numMissed field&lt;/returns&gt;
          public int GetNumMissed()
          {
              return numMissed;
          }
      }
  }
  </code></pre>
  
  <p>and here is my Main</p>
  
  <pre><code>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();
          }
      }
  }
  </code></pre>
  
  <p>the output should be</p>
  
  <pre><code>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
  </code></pre>
  
  <p>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 </p>