gpt4 book ai didi

C#继承问题

转载 作者:太空狗 更新时间:2023-10-29 21:06:38 25 4
gpt4 key购买 nike

我正在创建一个抽象基类,它具有由其他类实现的功能。我的疑惑如下

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

2) 我需要一个将在基类中实现的函数,我不希望它被子类覆盖。我在该函数的前面添加了“fixed”关键字。编译器开始提示“成员”不能被密封,因为它不是覆盖。我在这里做错了吗?

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;
}


};

最佳答案

  1. 对于在抽象类中没有实现的方法,也使用abstract:

    abstract public void Draw();
    abstract public float getWidth();
    abstract public void Swap();
    abstract public void Erase();
  2. 默认情况下,方法是不可覆盖的;它们只允许派生类在声明为 abstractvirtualoverride 时进行覆盖(但不允许 override sealed)。

    因此,除了 public 之外,您不需要给 getShapeDetails() 任何其他修饰符:

    public ShapeDetails getShapeDetails()
    {
    return _shapedDetails;
    }

附带说明一下,您应该坚持 .NET 命名约定并使用 Pascal 大小写将方法名称大写,因此 getWidth() 变为 GetWidth() getShapeDetails() 变为 GetShapeDetails()

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

private ShapeDetails _shapedDetails;

public ShapeDetails ShapedDetails
{
get { return _shapedDetails; }
}

关于C#继承问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6120933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com