我粘贴以下代码:
services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")),ServiceLifetime.Transient);
我无法理解为什么上面的Abstract类没有执行? 上面的代码运行完美,也产生输出。 我的问题是,在调用add()方法之后仍然覆盖了Program类中的抽象方法,为什么非抽象方法正在执行而抽象方法不是?
此外,如果我将程序更改为:
abstract public class test
{
abstract public void add(int a, int b);
}
class Program : test
{
public void add(decimal a, decimal b)
{
decimal c = a + b;
Console.WriteLine("Decimal Addition : {0}", c);
}
public override void add(int a, int b)
{
int c = a + b;
Console.WriteLine("Addition : {0} ", c);
}
static void Main(string[] args)
{
Program obj = new Program();
obj.add(10, 111);
Console.ReadLine();
}
}
然后我的Abstract方法正在执行并给我想要的结果。请解释任何人。在下面的行中实际发生了什么。我知道这是一个非常基本的问题,但我在这里有点困惑。请帮忙 !提前谢谢。
abstract public class test
{
abstract public void add(int a, int b);
}
class Program : test
{
public void add(decimal a, decimal b)
{
decimal c = a + b;
Console.WriteLine("Decimal Addition : {0}", c);
}
public override void add(int a, int b)
{
int c = a + b;
Console.WriteLine("Addition : {0} ", c);
}
static void Main(string[] args)
{
test obj = new Program();
obj.add(10, 111);
Console.ReadLine();
}
}
答案 0 :(得分:2)
这是因为在derive类中声明的任何方法都优先于基本继承方法。
如果要调用add(int a, int b)
,则需要告诉编译器add(decimal a, decimal b)
不存在。这是通过将其转换为test
abstract public class test
{
abstract public void add(int a, int b);
}
class Program : test
{
public void add(decimal a, decimal b)
{
decimal c = a + b;
Console.WriteLine("Decimal Addition : {0}", c);
}
public override void add(int a, int b)
{
int c = a + b;
Console.WriteLine("Addition : {0} ", c);
}
static void Main(string[] args)
{
test obj = new Program();
obj.add(10, 111);
Console.ReadLine();
}
}
如果您不想投射它,可以将add(decimal a, decimal b);
声明为抽象类。
像这样:
abstract public class test
{
abstract public void add(int a, int b);
abstract public void add(decimal a, decimal b);
}
public class Program : test
{
public override void add(int a, int b)
{
int c = a + b;
Console.WriteLine("Addition : {0} ", c);
}
public override void add(decimal a, decimal b)
{
decimal c = a + b;
Console.WriteLine("Decimal Addition : {0}", c);
}
public static void Main(string[] args)
{
Program obj = new Program();
obj.add(10, 111);
Console.ReadLine();
}
}