Код: Выделить всё
public class Base { }
public class Child1 : Base { }
public class Child2 : Base { }
Код: Выделить всё
public class Base { public virtual string GetHash() { ... } }
public class Child1 : Base { public override string GetHash() { ... } }
public class Child2 : Base { public override string GetHash() { ... } }
Однако по причинам, не имеющим отношения к данному вопросу (связано с разделением задач), я не могу реализовать методы хеширования внутри классовая иерархия. Вместо этого у меня есть класс Hasher для этой задачи.
Вот простой способ реализовать его с помощью условной цепочки:
Код: Выделить всё
public class Hasher
{
public string GetHash(Base data)
{
if (data is Child1 c1)
return GetHashChild1(c1);
else if (data is Child2 c2)
return GetHashChild2(c2);
else
return GetHashBase(data);
}
private string GetHashChild1(Child1 c) { ... }
private string GetHashChild2(Child2 c) { ... }
private string GetHashBase(Base b) { ... }
}
- в случае, если я добавлю новых дочерних классов в иерархию, мне нужно только реализовать соответствующие им методы хеширования (а не обновлять какие-либо операторы if-else-if/switch или заполнять словари и т. д.)?
- другими словами: перенаправление на правильный метод происходит автоматически?
Код: Выделить всё
GetHash(T ...)Подробнее здесь: https://stackoverflow.com/questions/787 ... nheritance