#c# #class #methods #indexer
#c# #класс #методы #индексатор
Вопрос:
У меня есть сезон занятий и эпизод занятий. Класс Season наследует класс Episode. В моем эпизоде с классом есть этот метод:
public void AddView(double rating)
{
viewerCount ;
ratingSum = rating;
if (rating > this.largestRating)
this.largestRating = rating;
}
В моем сезоне занятий есть список эпизодов:
public Episode[] episodes { get; private set; }
Я переопределил индексатор класса Season, чтобы он возвращал индексированный эпизод в списке:
public object this[int i]
{
get { return episodes[i]; }
}
Поэтому, когда я делаю это в программе:
Console.WriteLine(season[5]);
Console.WriteLine(episodes[5]);
Я получаю тот же результат.
Между тем, когда я пытаюсь вызвать методы в этих эпизодах, episodes[5] позволяет мне вызывать функцию addView, но season[5] не позволяет мне.
Severity Code Description Project File Line Suppression State
Error CS1061 'object' does not contain a definition for 'AddView' and no accessible extension
method 'AddView' accepting a first argument of type 'object' could be found (are you missing a using
directive or an assembly reference?) OOP-DZ2 C:UserspatrisourcereposOOP-DZ2OOP-
DZ2Program.cs 22 Active
Как я могу переопределить индексатор, чтобы я мог получить доступ к своему списку объектов эпизодов внутри объекта Season и вызывать для него методы?
РЕШАЕМАЯ ПРОБЛЕМА: мой индексатор был переопределен ошибочно, он вернул объект вместо эпизода класса. Спасибо.
Комментарии:
1. Ваш индексатор возвращает объект
Episode
, я полагаю, он должен вернуться?2. Я думаю, вы пытаетесь получить объектный сезон и эпизод с одним и тем же индексатором, верно?
3. вы использовали это ключевое слово, и это относится к настоящему классу, вы должны написать индексатор для разных классов.
Ответ №1:
Ваш класс Season не должен быть базовым классом Episode, а просто контейнером. На самом деле, вы говорите « Class Season inherits class Episode
«, что для меня не имеет смысла, а позже вы правильно заявляете, что « My class Season has a list of episodes
«.
Я переопределил индексатор класса Season, чтобы он возвращал индексированный эпизод в списке:
public object this[int i]
{
get { return episodes[i]; }
}
Операторы не переопределяются. Вы перегружаете их обычное поведение, чтобы адаптировать их к вашему классу, но они не переопределяются в смысле C #, переписывая их в производный класс. Возможно, из-за этой путаницы вы вернули object
вместо правильного класса Episode .
public Episode this[int i]
{
get { return episodes[i]; }
}
Между тем, когда я пытаюсь вызвать методы в этих эпизодах, episodes[5] позволяет мне вызывать функцию
AddView
, но season [5] не позволяет мне.
Это обычное поведение. Я предполагаю, что episodes[5] — это массив объектов класса Episode, в то время Season[5]
как просто возвращает объект.
class Episode {
}
class Season {
public Episode this[int i]
{
get { return episodes[i]; }
}
List<Episode> episodes;
}