阅读有关受保护的访问修饰符的文档后,我编写了一个简单的C#代码,但是我收到许多不合逻辑的错误。我找不到任何解决方案。
using System;
public class WeaponController
{
protected void Reload()
{
Console.WriteLine("Reload");
}
protected virtual void Shoot()
{
}
}
public class SMGController : WeaponController
{
private override void Shoot()
{
Console.WriteLine("Shoot");
}
}
public class Test
{
public static void Main()
{
var test = new SMGController();
test.Shoot();
test.Reload();
}
}
我收到以下错误:
prog.cs(19,27):错误CS0621:
SMGController.Shoot()': virtual or abstract members cannot be private prog.cs(19,27): error CS0507:
SMGController.Shoot()':在以下情况下无法更改访问修饰符 覆盖protected' inherited member
WeaponController.Shoot()' prog.cs(10,25):(与先前错误相关的符号位置) 编译失败:2个错误,0个警告
如果我将SMGController中的Shoot()方法的访问修饰符更改为保护状态,则会收到更多错误:
prog.cs(30,8):错误CS1540:无法访问受保护的成员
WeaponController.Shoot()' via a qualifier of type
SMGController”。 限定符的类型必须为Test' or derived from it prog.cs(10,25): (Location of the symbol related to previous error) prog.cs(30,8): error CS0122:
WeaponController.Shoot()'为 由于其防护等级prog.cs(10,25):( 与先前错误相关的符号)prog.cs(31,8):错误CS1540: 无法访问受保护的成员WeaponController.Reload()' via a qualifier of type
SMGController'。限定词必须是类型Test' or derived from it prog.cs(5,17): (Location of the symbol related to previous error) prog.cs(31,8): error CS0122:
WeaponController.Reload()'由于受到保护而无法访问 prog.cs(5,17)级:(与上一个符号相关的符号位置 错误),编译失败:4个错误,0个警告
我的代码有什么问题?