В этом случае перегрузка юзается?
class A
{
public int zz(string a)
{
return 1;
}
}
class B : A
{
public int zz(float a)
{
return 1;
}
}
если да, переделайте его чтобы было переопределение.. . мне нужно понять что это на примере)
Другие языки программирования и технологии
Подскажите про перегрузку/переопределение C#
Переопределение - это когда в производном классе есть метод с точно такой же сигнатурой как и базовом классе. Т. е. он скрывает метод базового класса, и должен помечаться ключевым словом new.
class A {
public int zz(string a) { return 1; }
}
class B : A {
public new int zz(string a) { return 2; }
}
Перегрузка - это когда в одном классе есть несколько методов с одинаковыми именами, но разными параметрами. Возвращаемый тип при этом не учитывается.
class A {
public int zz(string a) { return 1; }
public int zz(float a) { return 2; }
public int zz(bool a) { return 3; }
}
class A {
public int zz(string a) { return 1; }
}
class B : A {
public new int zz(string a) { return 2; }
}
Перегрузка - это когда в одном классе есть несколько методов с одинаковыми именами, но разными параметрами. Возвращаемый тип при этом не учитывается.
class A {
public int zz(string a) { return 1; }
public int zz(float a) { return 2; }
public int zz(bool a) { return 3; }
}
using System;
namespace example
{
class A
{
public virtual int zz(string a)
{
return 1;
}
public virtual int zz(double a)
{
return 11;
}
}
class B : A
{
public override int zz(string a)
{
return 2;
}
public override sealed int zz(double a)
{
return 22;
}
}
class Program : B
{
public static void Main(string[] args)
{
A a = new A();
B b = new B();
Console.WriteLine(a.zz("test"));
Console.WriteLine(b.zz("test"));
Console.WriteLine(a.zz(22.5));
Console.WriteLine(b.zz(22.5));
Console.WriteLine();
Console.ReadKey();
}
}
}
В базовом классе А два метода zz(), которые перегружены, у них разная сигнатура.
В производном от А классе В имеются те же методы, которые переопределены.
В производном от В классе Program демонстрируется вызов этих методов через объекты с различными параметрами.
virtual - позволение переопределять метод в производном классе
override - говорит о переопределении метода базового класса
sealed - запрещает дальнейшее переопределение этого метода во всех производных от B классах
namespace example
{
class A
{
public virtual int zz(string a)
{
return 1;
}
public virtual int zz(double a)
{
return 11;
}
}
class B : A
{
public override int zz(string a)
{
return 2;
}
public override sealed int zz(double a)
{
return 22;
}
}
class Program : B
{
public static void Main(string[] args)
{
A a = new A();
B b = new B();
Console.WriteLine(a.zz("test"));
Console.WriteLine(b.zz("test"));
Console.WriteLine(a.zz(22.5));
Console.WriteLine(b.zz(22.5));
Console.WriteLine();
Console.ReadKey();
}
}
}
В базовом классе А два метода zz(), которые перегружены, у них разная сигнатура.
В производном от А классе В имеются те же методы, которые переопределены.
В производном от В классе Program демонстрируется вызов этих методов через объекты с различными параметрами.
virtual - позволение переопределять метод в производном классе
override - говорит о переопределении метода базового класса
sealed - запрещает дальнейшее переопределение этого метода во всех производных от B классах
В данном случае перезагрузка, т. к. у тебя в классе B появилась возможность использовать метод с аргументами разных типов (старый метод вызываемый со строкой унаследовался от класса A, а перезагруженный ты определила в B).
var b = new B();
b.zz("string");
b.zz(0.123);
Так будет и то и другое:
class B : A
{
public int zz(string a) // здесь метод переопределяется, типы аргументов и возвращаемого значения не поменялись
{
return 2;
}
public int zz(float a) // здесь перегружается
{
return 1;
}
}
var b = new B();
b.zz("string");
b.zz(0.123);
Так будет и то и другое:
class B : A
{
public int zz(string a) // здесь метод переопределяется, типы аргументов и возвращаемого значения не поменялись
{
return 2;
}
public int zz(float a) // здесь перегружается
{
return 1;
}
}
Похожие вопросы
- Подскажите стоящий учебник по C++
- Подскажите есть ли в c# строковые имена индексов массива как в PHP (пример a["abc"])? если есть то как с ними работать
- Народ подскажите ! вот решил изучить c++ мож есть какие нибудь сайты или книги по этой теме так чтоб за месяц изучить!
- Подскажите пожалуйста С ++ и C# это один язык программирования, или они совершенно разные?
- Подскажите пожалуйста новичку в C++)
- Помогите с переопределением операторов в C++
- C++ Помогите, не работает перегрузка
- Идет переопределение в C++
- Перегрузка оператора в C++
- C++. Перегрузка