In the following example I am able to create a virtual method Show() in the inherited class and then override it in the inheriting class.
I want to do the same thing with the protected class variable prefix but I get the error:
The modifier 'virtual' is not valid for this item
But since I can't define this variable as virtual/override in my classes, I get the compiler warning:
TestOverride234355.SecondaryTransaction.prefix' hides inherited member 'TestOverride234355.Transaction.prefix'. Use the new keyword if hiding was intended.
Luckily when I add the new keyword everything works fine, which is ok since I get the same functionality, but this raises two questions:
- Why I can use virtual/override for methods but not for protected class variables? 
- What is the difference actually between the virtual/override approach and the hide-it-with-new approach since at least in this example they offer the same functionality? 
Code:
using System;
namespace TestOverride234355
{
    public class Program
    {
        static void Main(string[] args)
        {
            Transaction st1 = new Transaction { Name = "name1", State = "state1" };
            SecondaryTransaction st2 = 
                new SecondaryTransaction { Name = "name1", State = "state1" };
            Console.WriteLine(st1.Show());
            Console.WriteLine(st2.Show());
            Console.ReadLine();
        }
    }
    public class Transaction
    {
        public string Name { get; set; }
        public string State { get; set; }
        protected string prefix = "Primary";
        public virtual string Show()
        {
            return String.Format("{0}: {1}, {2}", prefix, Name, State);
        }
    }
    public class SecondaryTransaction : Transaction
    {
        protected new string prefix = "Secondary";
        public override string Show()
        {
            return String.Format("{0}: {1}, {2}", prefix, Name, State);
        }
    }
}
 
     
     
     
     
     
     
     
    