代码之家  ›  专栏  ›  技术社区  ›  BadmintonCat

调用基类型上使用的重写方法

  •  -1
  • BadmintonCat  · 技术社区  · 6 年前

    using System;
    
    namespace ConsoleApp1
    {
        public class TextInput
        {
            protected string _text = "";
    
            public void Add(char c)
            {
                _text += c;
            }
    
            public string GetValue()
            {
                return _text;
            }
        }
    
    
        public class NumericInput : TextInput
        {
            public new void Add(char c)
            {
                if (!char.IsDigit(c)) return;
                _text += c;
            }
        }
    
    
        public class Program
        {
            public static void Main(string[] args)
            {
                TextInput input = new NumericInput();
                input.Add('1');
                input.Add('a');
                input.Add('0');
                Console.WriteLine(input.GetValue());
    
                Console.WriteLine(char.IsDigit('1'));
                Console.WriteLine(char.IsDigit('a'));
                Console.WriteLine(char.IsDigit('0'));
            }
        }
    }
    

    Console.WriteLine(char.IsDigit('a')); False Add True

    TextInput.Add() NumericInput.Add() Add() 方法?编码 Main

    3 回复  |  直到 6 年前
        2
  •  0
  •   Prasad Telkikar    6 年前

    virtual override

    namespace ConsoleApp1
    {
        public class TextInput
        {
            protected string _text = "";
            //Virtual allows derived class to enhance its functionality.
            public virtual void Add(char c)
            {
                _text += c;
            }
            ....
        }
    
    
        public class NumericInput : TextInput
        {
            //Override function will add more functionality to base class function
            public override void Add(char c)
            {
                if (!char.IsDigit(c)) return;
                _text += c;
            }
        }
    

    new

    Stackoverflow thread

        3
  •  0
  •   Arsalan    6 年前

    add T

    public abstract class Input<T>
        {
            protected T __input;
            public abstract void Add(T c);
            public T GetValue()
            {
                return __input;
            }
        }
        public class NumericInput : Input<int>
        {
            public override void Add(int c)
            {
                __input += c;
            }
        }
        public class TextInput : Input<string>
        {
            public override void Add(string c)
            {
                __input += c;
            }
        }
    
    static void Main(string[] args)
            {
                var input = new NumericInput();
                input.Add(1);
                input.Add(2);
                Console.WriteLine(input.GetValue());
    
                var text = new TextInput();
                text.Add("a");
                text.Add("a");
                text.Add("a");
                Console.WriteLine(text.GetValue());
    
                Console.ReadLine();
            }