2014-12-24 2 views
1

Я новичок в C#. Я понимаю концепцию наследования. Я пытаюсь узнать, могут ли перегруженные методы быть перегружены, я googled, но не могу найти хороший ответ. Также я попробовал использовать следующий код. В коде я обращаюсь к методу, который является перегруженным методом переопределенного метода, когда я отлаживаю эту программу, он не возвращает никаких результатов на экране. Поэтому я смущен тем, что перегруженный метод может быть перегружен или нет?Можно ли перегрузить переопределенный метод?

public class method1 
{ 
    public virtual void PrintName() 
    { 
     Console.WriteLine("Hello world"); 
    } 
} 

public class method2 : method1 
{ 
    public override void PrintName() 
    { 
     Console.WriteLine("Hello World Overriden"); 
    } 

    public string PrintName(String strPolymorphism) 
    { 
     return strPolymorphism; 
    } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     method2 m2 = new method2(); 
     m2.PrintName("method overloading is possible?"); 
    } 
} 

ответ

1

Ваш m2.PrintName просто возвращает строку, которую он получает. Он ничего не делает с этим. Если вы это сделаете, вы увидите вывод.

public string PrintName(String strPolymorphism) 
{ 
    this.PrintName(); // first write the output of `PrintName` to the console 

    Console.WriteLine("Called PrintName with: " + strPolymorphism); 
    return strPolymorphism; 
} 

Ваш перегрузкиm2.PrintName не имеет ничего общего с переопределенPrintName методом с другой сигнатурой в классе method2 или method1. Подпись имеет значение. Много!

5

Что вы делаете overloading не перекрывая. Вы можете добавить метод с тем же именем и другой подписью столько раз, сколько хотите.

В вашем методе вы просто возвращаете string и не показываете его. Этот метод не имеет ничего общего с другой перегрузкой, которая принимает параметр 0.

+0

но почему, в моей программе перегрузки метод не возвращает выход? – SVT002

+0

возвращает строку. Вы игнорируете это. 'Console.WriteLine (m2.PrintName ("метод перегрузки возможно?"));' –

+0

@ SVT002 использовать код ниже: класс программы { статической силы Main (string [] арг) { method2 m2 = новый method2 (); string val = m2.PrintName (возможна перегрузка метода?); \t Console.WriteLine (val); \t } } –

0

С С # стандарт

Перегрузка методов позволяет класса, структуры или интерфейса, чтобы объявить несколько методов с тем же именем, при условии их подписи являются уникальными в пределах этого класса, структуры или интерфейса.

Вы можете перегрузить метод, пока его подпись уникальна внутри класса, базовый класс не рассматривается. Причина, по которой ничего не печатается, заключается в том, что в перегруженном методе вы просто возвращаете переданное значение, а не печатаете его.

public string PrintName(String strPolymorphism) 
{ 
    return strPolymorphism; // Do you mean Console.WriteLine(strPolymorphism); 
} 
Смежные вопросы