加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#继承问题

发布时间:2020-12-15 03:53:30 所属栏目:百科 来源:网络整理
导读:我正在创建一个抽象基类,其中包含由其他类实现的函数.我的怀疑如下 1)我是否需要在每个需要被子类覆盖的函数前面给出“虚拟”?我看到一些没有虚拟关键字的示例,但仍然可以覆盖它们. 2)我需要有一个将在基类中实现的函数,我不希望它被子类重写.我添加了该功
我正在创建一个抽象基类,其中包含由其他类实现的函数.我的怀疑如下

1)我是否需要在每个需要被子类覆盖的函数前面给出“虚拟”?我看到一些没有虚拟关键字的示例,但仍然可以覆盖它们.

2)我需要有一个将在基类中实现的函数,我不希望它被子类重写.我添加了该功能的“固定”关键字.编译器开始抱怨“成员”无法密封,因为它不是覆盖.我在这里做错了吗?

abstract public class ShapeBase
    {
        private ShapeDetails _shapedDetails;

        public CampusCardBase(ShapeDetails shDetails)
        {
            _shapedDetails= shDetails;
        }

        public virtual void Draw();
        public virtual float getWidth();
        public virtual void Swap();
        public virtual void Erase();

        public sealed ShapeDetails getShapeDetails()
        {
            return _shapedDetails;
        }


    };

解决方法

>对于在抽象类中没有实现的方法,也使用abstract:
abstract public void Draw();
abstract public float getWidth();
abstract public void Swap();
abstract public void Erase();

>默认情况下,方法不可覆盖;如果声明为abstract,virtual或override(但不覆盖密封),它们只允许派生类重写.

因此,您不需要为getShapeDetails()提供除public之外的任何其他修饰符:

public ShapeDetails getShapeDetails()
{
    return _shapedDetails;
}

另外,您应该坚持使用.NET命名约定并使用Pascal大小写大写方法名称,因此getWidth()变为GetWidth(),getShapeDetails()变为GetShapeDetails().

实际上你应该为你的_shapedDetails字段使用property getter而不是getShapeDetails()方法:

private ShapeDetails _shapedDetails;

public ShapeDetails ShapedDetails
{
    get { return _shapedDetails; }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读