【发布时间】:2014-12-24 15:12:21
【问题描述】:
错误 1 'Interface.myDerivedClass.myMethod()':虚拟或抽象成员不能是私有的 c:\users\igmfun\documents\visual studio 2012\Projects\Interface\Interface\Program.cs 16
将虚拟或抽象成员设为私有会使其他类(包括派生类)无法访问它,从而无法覆盖该方法,使其虚拟或抽象质量毫无意义。我明白了。
但是等等......编译器抱怨的是派生类中的成员,而不是基类......而且我从未将该成员声明为虚拟或抽象......覆盖成员也是如此(在派生类)从它覆盖的虚拟或抽象成员继承虚拟或抽象质量?
另外,如果我改变了
override void myMethod(){}
到
public override void myMethod(){}
我收到一个新错误,
“找不到合适的方法来覆盖。”
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Interface
{
interface myInterface
{
void myMethod();
}
class myDerivedClass : myInterface
{
override void myMethod()
{
}
}
class Program
{
static void Main(string[] args)
{
}
}
}
【问题讨论】:
-
实现一个界面的需求
override关键字 -
所有接口方法都是公共的。您在派生类中的签名应该只是 public void myMethod() {}。如果不指定public,则假定该方法在派生类中是私有的。
-
正如 MaxHampton 所暗示的,您不需要
override关键字,因为您没有覆盖任何内容。只有在基类中声明了virtual或abstract时,您才能覆盖某些内容。接口成员被实现,而不是被覆盖。 -
一个接口不是一个类。
-
jmcilhinney,你的解释最适合我 - 谢谢大家!
标签: c# inheritance private-members