【问题标题】:Error: can't declare a virtual/ abstract member private [duplicate]错误:无法声明虚拟/抽象成员私有 [重复]
【发布时间】:2011-11-16 05:48:53
【问题描述】:

可能重复:
Why are private virtual methods illegal in C#?

我在 C# 中有以下代码,Visual Studio 在派生类中抱怨我不能声明一个虚拟/抽象成员私有..但我不是..所以有人有什么想法吗?谢谢

public class  Base
{
    private const string Name= "Name1";
    protected virtual string Member1
    {
    get{
       return Name;
       }
     }
}

public class Derived: Base
{
 private const string Name= "Name2";
 protected override string Member1
 {
  get{
     return Name;
     }
 }   
}

【问题讨论】:

  • 您也可以发布实际的错误消息吗?完整吗?
  • 这根本不是正确的 C#... 请发布您的实际代码!
  • 我希望你的实际代码有小写的class,并且成员函数被正确声明为protected virtual string Member1();
  • 这不是其他帖子的重复。成员被声明为受保护的,而不是私有的。是的,我已经编辑了代码。
  • @Rosie,这个版本的代码可以编译。您确定问题不在其他区域吗?提供一个实际演示问题的 sn-p。

标签: c#


【解决方案1】:

无法重现,修复了“类”的情况并提供了方法体:

class Base
{    
    protected virtual string Member1() { return null; }    
}

class Derived : Base
{
    protected override string Member1() { return null; }   
}

编译时没有警告。

如果您尝试将 fields 声明为虚拟,您会得到:

Test.cs(11,30):错误 CS0106:修饰符“virtual”对此项目无效
Test.cs(17,31): 错误 CS0106: 修饰符 'override' 对此项无效

【讨论】:

  • 用道具做同样的事——也没问题...
  • 谢谢,乔恩。它编译得很好。 Visual Studio 很奇怪,它一直给我这个警告,直到我编译它......
【解决方案2】:

虚拟方法必须有一个主体:

public class  Base
{

    protected virtual string Member1()
    {
        return "";
    }

}

public class Derived: Base
{
    protected override string Member1()
    {
        return "this is the ovveride";
    }

}

【讨论】:

    猜你喜欢
    • 2011-07-18
    • 1970-01-01
    • 2014-12-24
    • 1970-01-01
    • 2017-08-04
    • 1970-01-01
    • 2019-02-17
    • 2014-01-10
    相关资源
    最近更新 更多