gpt4 book ai didi

c# - 您如何在层次结构的某个级别而不是最低级别调用类的方法?

转载 作者:太空宇宙 更新时间:2023-11-03 20:11:02 25 4
gpt4 key购买 nike

说我有:

class Foo
{
string name1;
public Foo(string name1)
{
this.name1 = name1;
something();
}
virtual void something()
{
Console.WriteLine("Hello, " + name1);
}
}

class Bar inherits Foo
{
public Bar(string name1, string name2) : base(name1)
{
this.name2 = name2;
something();
}

override void something()
{
Console.WriteLine("Good bye, " + name2);
}
}

我想要完成的是 something()Foo 上构造函数调用 somethingFoo 定义, 不是 Bar 定义的那个.但是如果我这样做:

Bar b = new Bar("A", "B");

Bar构造函数调用 Foo调用 something 的构造函数由 Bar 定义,而不是由 Foo 定义。

我知道我想做的是糟糕的面向对象设计。我这样做是为了优化。

这可能吗?谢谢。

最佳答案

Bar 中使用 new 关键字声明 something 方法:

new void something()
{
Console.WriteLine("Good bye, " + name2);
}

这样,Foo 类中的每个something 调用都将调用Foo.something。而且您无法从那里调用 Bar.something

有了它,您可以通过将 Bar 对象转换为 Foo 来调用 Foo.something:

((Foo)barInstance).something() // calls Foo.something()
barInstance.something() // calls Bar.something()

保持多态性的另一种方法:从 Foo 构造函数中调用不同的方法。

class Foo
{
string name1;
public Foo(string name1)
{
this.name1 = name1;
somethingImpl();
}
virtual void something()
{
somethingImpl();
}
private void somethingImpl()
{
Console.WriteLine("Hello, " + name1);
}
}

关于c# - 您如何在层次结构的某个级别而不是最低级别调用类的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20040830/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com