【问题标题】:Overriding indexers and using methods in C#在 C# 中覆盖索引器和使用方法
【发布时间】:2021-03-14 08:24:31
【问题描述】:

我有一个班级季节和班级剧集。类 Season 继承类 Episode。 我的课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]);

我得到相同的输出。 同时,当我尝试调用这些情节的方法时,情节[5] 允许我调用函数 AddView,但季节[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:\Users\patri\source\repos\OOP-DZ2\OOP- 
DZ2\Program.cs  22  Active

如何覆盖索引器,以便访问 Season 对象中的 Episode 对象列表并调用其方法?

已解决 我的索引器被错误地覆盖,它返回对象而不是 Episode 类。谢谢。

【问题讨论】:

  • 你的索引器返回一个对象,我猜它应该返回Episode
  • 我认为您正在尝试使用相同的索引器获取对象季节和剧集,对吗?
  • 你用了这个关键字,这个引用了当前类,你应该在不同的类上写索引器。

标签: c# class methods indexer


【解决方案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]; }
}

同时,当我尝试调用这些情节的方法时,情节[5] 允许我调用函数AddView,但季节[5] 不允许我这样做。

这是常规行为。我猜 episodes[5] 是 Episode 类的对象数组,而 Season[5] 只返回一个对象。

class Episode {
}

class Season {
    public Episode this[int i]
    {
        get { return episodes[i]; }
    }

    List<Episode> episodes;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 1970-01-01
    • 2010-11-16
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多