2012-08-19 3 views
-2

У меня есть следующий класс, который имеет классы родительского класса, который имеет свойство Radius, и я обращаюсь к этому свойству в свой дочерний класс (HeaxGon), но он дает мне ошибку в дочернем классе (get или установите ожидаемый аксессуар)C# как использовать свойство класса Parent в дочернем классе

Просьба сообщить. класс Формы { int _radius;

public int Radius 
    { 
     get { return _radius; } 
     set { _radius = value; } 
    } 
} 


    class HeaxGon:Shapes 
{ 
    int points; 
      public void SetRadius 
    { 
     **Radius=20;** 
    } 
} 
+0

Существуют две очевидные синтаксические ошибки: 1) Эти '**' недопустимы 2) Вы забыли скобки, необходимые для объявления метода. – CodesInChaos

+0

Ваше имя базового класса действительно должно быть «Shape», а не «Shapes», поскольку оно определяет только одну форму, а не их группу (и даже тогда это должен быть ShapeList). Семантика важна в ясном программировании. –

+0

Нет необходимости в методе SetRadius. Это то, что делает общедоступный аксессуар свойства Radius. Если вы на самом деле не хотите метод, который просто устанавливает радиус в 20. В этом случае я бы переименовал его в SetRadiusToTwenty или что-то подобное. Наконец, я думаю, вы, возможно, пытаетесь записать слово «Hexagon». – MgSam

ответ

0

Сделать _radius защищен, а затем просто вызвать this.Radius в дочернем классе. Итак:

public class Shape 
{ 
    protected int _radius; 

    public int Radius 
    { 
     get { return _radius; } 
     set { _radius = value; } 
    } 
} 

public class Hexagon : Shape 
{ 
    int _points; 

    public void SetRadius(int radius) 
    { 
     this.Radius = radius; 
    } 
} 
3

Я предполагаю, что вы пытаетесь создать функцию, называемую SetRadius, в этом случае, это то, что он должен выглядеть следующим образом:

public void SetRadius(int radius) 
{ 
    this.Radius = radius; 
} 

Или, если вы действительно хотите, чтобы установить его 20 во всех случаях:

public void SetRadius() 
{ 
    this.Radius = 20; 
} 
+2

Метод SetRadius не нужен вообще. –

+0

Да, в его нынешнем виде это кажется совершенно излишним, но, возможно, у OP есть что-то еще в виду. – mhusaini

1

Вы написали это плохо, это должно выглядеть следующим образом:

class Shapes 
{ 
    int _radius; 

    public int Radius 
    { 
     get { return _radius; } 
     set { _radius = value; } 
    } 
} 


class HeaxGon:Shapes 
{ 
    int points; 

    public void SetRadius() 
    { 
     Radius=20; 
    } 
} 

Нет необходимости звонить «это», как это предполагали другие.

Или просто работать с собственностью вы уже выставлены в вашем базовом классе

HeaxGon hg = new HeaxGon(); 
hg.Radius = 20; 

Это будет вызывать ваш сеттер вы указали в базовом классе (Shapes).

+0

Спасибо большое за ваш ответ, вы поймаете правильную точку, я упустил скобки методов, которые должны быть SetRadius() вместо SetRadius..поэтому компилятор думал об этом как свойство. Спасибо за весь ваш ответ .. – Raman

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