2014-01-18 3 views
-2

У меня немного brainfart на моем базовые знания наследования:Переменное наследование от интерфейса?

public interface IDrawable 
{ 
    public double x, y; 
    object GetDrawable(); 
} 

public class Beacon : IDrawable 
{ 
    public Beacon(string id, double x, double y) 
    { 
     this.id = id; 
     this.x = x; 
     this.y = y; 
    } 
} 

Почему не конструктор Beacon в состоянии найти двойников х и у, определенные в его родителя?

+2

напишите свой код и попробуйте, прежде чем задавать вопрос. Ваш код даже не компилируется! –

ответ

4

Ваш код не компилируется, потому что:

Ошибка 1 Интерфейсы не могут содержать поля

Интерфейс об операциях (включая свойства), они не могут содержать данные. Вы можете использовать свойства здесь, но они должны быть реализованы в вас классе:

public interface IDrawable 
{ 
    double x { get; set; } 
    double y { get; set; } 
    // ... 
} 

public class Beacon : IDrawable 
{ 
    public double x { get; set; } 
    public double y { get; set; } 

    public Beacon(string id, double x, double y) 
    { 
     // ... 
     this.x = x; 
     this.y = y; 
    } 
} 

Если базовый класс должен содержать эти данные, сделать это абстрактный класс:

public abstract class Drawable 
{ 
    public double x { get; set; } 
    public double y { get; set; } 
    public abstract object GetDrawable(); 
} 

public class Beacon : Drawable 
{ 
    public Beacon(string id, double x, double y) 
    { 
     //this.id = id; 
     this.x = x; 
     this.y = y; 
    } 

    public override object GetDrawable() 
    { 
     // ... 
    } 
} 

Таким образом, окончательный вывод здесь есть - читайте о различиях между классами и абстрактными классами и решайте, какой путь вы должны предпринять.

+0

Aha, duh. Я явно слишком долго занимался исследованиями и управленческими аспектами, и я забыл основные детали реализации. Благодаря! – Benjin

3

Это не должно компилироваться. Вы должны объявить x и y как свойства в вашем интерфейсе и реализовать getter и setter в своей реализации.

Смежные вопросы