gpt4 book ai didi

c# - 继承一个接口(interface),实现部分方法,让派生类实现其余部分

转载 作者:可可西里 更新时间:2023-11-01 08:42:35 25 4
gpt4 key购买 nike

定义以下 C# 接口(interface):

public interface IShape
{
int NumberOfLineSegments {get;}
int Area {get;}
}

接下来,我要定义几个矩形类:梯形、正方形等。所有这些类的 Area() 属性都不同,但 NumberOfLineSegments() 总是返回 4。因此,我想要一个名为 Rectangle(或 IRectangle)的“临时”类或接口(interface),它看起来像:

public Rectangle : IShape
{
public int NumberOfLineSegments{get{return 4;}}
}

我希望 Rectangle 仅实现 NumberOfLineSegment(),并将其留给其派生类来实现其余部分:

public Square : Rectangle 
{
public int Area() {get{return length*height;}
}

然而,由于 IShape 是一个接口(interface),Rectangle 类还必须实现 Area(),它不知道如何实现。因此,我似乎被卡住了,要么为 Rectangle 定义一个“虚拟”Area() 方法,要么根本不使用继承。

有什么办法可以避免这种情况吗?我通过 C# 和 StackOverflow 广泛阅读了 Richter 的 clr。提前致谢!

最佳答案

Rectangle 类应该是 abstract 并将 Area() 方法定义为抽象。

public interface IShape
{
int NumberOfLineSegments {get;}
float Area{get;}
}

public abstract class RectangleBase : IShape
{
public int NumberOfLineSegments { get { return 4; } }

public abstract float Area { get; }
}

public sealed class Square : RectangleBase
{
public override fload Area() { get { return length*height; }
}

如果您需要 Rectangle 实例:

public sealed class Rectangle : ReectangleBase
{
public int NumberOfLineSegments { get { return 4; } }

public float Area { get { throw new NotImplementedException(); } }
}

关于c# - 继承一个接口(interface),实现部分方法,让派生类实现其余部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11523739/

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