小编Bru*_*uno的帖子

关于虚拟/新/覆盖的困惑

我对virtual/ new/ override事情有点困惑.这是一个例子:

class A
{
    public virtual void mVVirtual() { Console.WriteLine("A::mVVirtual"); }
}

class B : A
{
    public virtual void mVVirtual() { Console.WriteLine("B::mVVirtual"); }
}

class C : B
{
    public override void mVVirtual() { Console.WriteLine("C::mVVirtual"); }
}


class Test
{
    static void Main()
    {
        B b1 = new C();
        b1.mVVirtual();    //C::mVVirtual ... I understand this

        A a2 = new C();
        a2.mVVirtual();    //A::mVVirtual ... ???
    }
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么在第二次通话中我们得到了A::mVVirtual.我通常用这个"算法"处理这些问题:

  1. 对于一个名为的实例方法,检查保存对象引用的变量的类型mVVirtual?没有一个......但确实有一个带有该签名和名称的虚拟方法!
  2. 虚方法?然后让我们检查 …

c# virtual overriding keyword new-operator

8
推荐指数
3
解决办法
1695
查看次数

C fork处理全局变量

我不理解这个程序的输出:

#include <pthread.h>
#include <stdio.h>
#include <unistd.h>

int i = 0;

int main()
{
    while(i<3)
    {
        fork();

        printf("%d\n",i);
        ++i;
    }
}
Run Code Online (Sandbox Code Playgroud)

输出是:

0
1
2
2
1
2
0
1
2
2
2
1
2
2
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我如何解决这个问题,以便完全理解为什么我得到这个输出?

c fork process global-variables

8
推荐指数
3
解决办法
1万
查看次数

有关Virtual/new ... plus接口的更多信息!

昨天我发布了一个关于new/virtual/override关键字的问题,我从你的答案中学到了很多东西.但我仍有一些疑虑.

在所有"盒子"之间,我与类型的方法表中真正发生的事情失去联系.例如:

interface I1 { void Draw(); }
interface I2 { void Draw(); }

class A : I1, I2
{
    public void Minstance() { Console.WriteLine("A::MInstance"); }
    public virtual void Draw() { Console.WriteLine("A::Draw"); }
    void I2.Draw() { Console.WriteLine("A::I2.Draw"); }
}
class B : A, I1, I2
{
    public new virtual void Draw() { Console.WriteLine("B::Draw"); }
    void I1.Draw() { Console.WriteLine("B::I1.Draw"); }
}

class Test
{

    public static void Main()
    {
        A a = new B();
        a.Draw();
        I1 i1 = new A();
        i1.Draw(); …
Run Code Online (Sandbox Code Playgroud)

c# virtual overriding interface new-operator

4
推荐指数
1
解决办法
449
查看次数