Краткий ответ: нет .
Но я думаю, что вы неправильно поняли несколько вещей об объектно-ориентированном программировании.
Таким образом, вы можете переопределить метод другим методом с тем же именем и другим прототипом, если вы хочу больше конфигурации или другого поведения. Вы можете наследовать от класса и переопределить методы, чтобы разделить общую часть и настроить все, что вы хотите.
Хорошо, так что вам нужна общая часть parent
, которая будет содержать раздел try catch.
Итак, у вас есть совершенно другой подход к тому, что вы делали, но если я правильно понял, вполне подходит то, что вы хотеть.
using System;
namespace ConsoleApp4
{
class Program
{
static void Main(string[] args)
{
VirtualTest test1 = new Test1();
test1.ParentMethod();
VirtualTest test2 = new Test1();
test2.ParentMethod();
Console.ReadKey();
}
}
abstract class VirtualTest
{
public void ParentMethod()
{
try
{
ChildMethod();
}
catch
{
Console.WriteLine("parent");
}
}
protected abstract void ChildMethod();
}
class Test1 : VirtualTest
{
protected override void ChildMethod()
{
try
{
throw new ArgumentException("A message");
}
catch (ArgumentException e)
{
Console.WriteLine(e.Message);
throw; //Here is a way to handle more specificly some
//errors but still throwing and keeping the original stacktrace
}
}
}
class Test2 : VirtualTest
{
protected override void ChildMethod()
{
throw new NotImplementedException();
}
}
}
В этом случае у вас также есть больший контроль над тем, что вы ловите на каком уровне, и вы можете решить, хотите ли вы справиться с этим или нет.
Чем выше уровень, с которым вы справляетесь Exception
тем лучше. Также в этом примере Parents
на самом деле являются родителями, а Children
на самом деле являются детскими детьми в стиле POO.