오류 1 'Interface.myDerivedClass.myMethod()': 가상 또는 추상 멤버는 개인 c : \ 사용자 \ igmfun \ documents \ visual studio 2012 \ Projects \ Interface \ Interface \ Program.cs 16가상 또는 추상적이지 않은 메소드로 인해 "C# 가상 또는 추상 멤버가 비공개가 될 수 없음"
가상 또는 추상 멤버를 비공개로 설정하면 파생 클래스를 비롯한 다른 클래스에서 액세스 할 수 없으므로 메서드를 재정의하거나 가상 또는 추상을 만들 수 없습니다 의미없는 품질. 알 겠어.
기다려 ... 컴파일러가 기본 클래스가 아닌 파생 클래스의 멤버에 대해 불평하고 있습니다. 그리고 멤버를 가상 또는 추상으로 선언하지 않았습니다 ... 따라서 무시 멤버 (파생 클래스)는 재정의하는 가상 또는 추상 멤버로부터 가상 또는 추상적 품질을 상속 받습니까?
또한 "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' 키워드를 구현합니다. – chengbo
모든 인터페이스 메소드는 public입니다. 파생 클래스의 서명은 public void myMethod() {} 여야합니다. public을 지정하지 않으면 메서드가 파생 클래스에서 private이라고 가정합니다. –
MaxHampton이 암시 하듯이, 당신이 아무 것도 무시하지 않기 때문에'override' 키워드가 필요 없습니다. 기본 클래스에서'virtual' 또는'abstract'로 선언 된 경우에만 무언가를 무효화 할 수 있습니다. 인터페이스 멤버는 오버라이드되지 않고 구현됩니다. – jmcilhinney