我写了一个程序,允许两班至"打&QUOT ;.无论出于何种原因C#总是获胜。有什么毛病VB.NET? [英] I wrote a program that allow two classes to "fight". For whatever reason C# always wins. What's wrong with VB.NET?

查看:64
本文介绍了我写了一个程序,允许两班至"打&QUOT ;.无论出于何种原因C#总是获胜。有什么毛病VB.NET?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我写了一个程序,让两个班为战斗。无论出于何种原因C#总是获胜。有什么毛病VB.NET?



 静态无效的主要(字串[] args)
{
球员一个新= A();
玩家B =新的B();

如果(a.Power> b。所示功率)
Console.WriteLine(C#荣获);
否则如果(a.Power< b。所示功率)
Console.WriteLine(VB荣获);
,否则
Console.WriteLine(铁);
}

下面是玩家:在C#
玩家A:

 公共类 - 答:玩家
{
私人INT desiredPower = 100;

公共覆盖INT GetPower
{
{返回desiredPower; }
}
}



玩家B在VB.NET:

 公共b类
继承球员

昏暗desiredPower为整数= 100

公共覆盖只读属性GetPower()作为整数
得到
返回desiredPower
端获取
高端物业
端类

这是一个基类。

 公共抽象类播放器
{
公众诠释电力{搞定;私人集; }

公共抽象INT GetPower {搞定; }

保护球员()
{
功率= GetPower;
}
}


解决方案

的这里的问题是,VB是调用设置它的字段值之前基本构造。所以基Player类卖场为零。

 。方法公开specialname rtspecialname 
实例无效.ctor()CIL管理
{
//代码大小15(0xF的)
.maxstack 8
IL_0000:ldarg.0
IL_0001:呼叫实例无效[基地]玩家::构造函数( )
IL_0006:ldarg.0
IL_0007:ldc.i4.s 100
IL_0009:stfld INT32 b :: desiredPower
IL_000e:RET
} //的结束方法b ::。ctor的


I wrote a program that allow two classes to "fight". For whatever reason C# always wins. What's wrong with VB.NET ?

   static void Main(string[] args)
    {
        Player a = new A();
        Player b = new B();

        if (a.Power > b.Power)
            Console.WriteLine("C# won");
        else if (a.Power < b.Power)
            Console.WriteLine("VB won");
        else
            Console.WriteLine("Tie");
    }

Here are the players: Player A in C#:

public class A : Player
{
    private int desiredPower = 100;

    public override int GetPower
    {
        get { return desiredPower; }
    }
}

Player B in VB.NET:

Public Class B
   Inherits Player

   Dim desiredPower As Integer = 100

   Public Overrides ReadOnly Property GetPower() As Integer
       Get
          Return desiredPower
       End Get
   End Property
 End Class

And here is a base class.

public abstract class Player
{
    public int Power { get; private set; }

    public abstract int GetPower { get; }

    protected Player()
    {
        Power = GetPower;
    }
}

解决方案

The issue here is that VB is calling the base constructor before setting its field value. So the base Player class stores zero.

.method public specialname rtspecialname 
        instance void  .ctor() cil managed
{
  // Code size       15 (0xf)
  .maxstack  8
  IL_0000:  ldarg.0
  IL_0001:  call       instance void [base]Player::.ctor()
  IL_0006:  ldarg.0
  IL_0007:  ldc.i4.s   100
  IL_0009:  stfld      int32 B::desiredPower
  IL_000e:  ret
} // end of method B::.ctor

这篇关于我写了一个程序,允许两班至&QUOT;打&QUOT ;.无论出于何种原因C#总是获胜。有什么毛病VB.NET?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆