gpt4 book ai didi

C# 同时声明类和接口(interface)

转载 作者:太空狗 更新时间:2023-10-29 19:49:01 29 4
gpt4 key购买 nike

// interface
public interface IHasLegs { ... }

// base class
public class Animal { ... }

// derived classes of Animal
public class Donkey : Animal, IHasLegs { ... } // with legs
public class Lizard : Animal, IHasLegs { ... } // with legs
public class Snake : Animal { ... } // without legs

// other class with legs
public class Table : IHasLegs { ... }

public class CageWithAnimalsWithLegs {
public List<??> animalsWithLegs { get; set; }
}

我应该在 ??强制继承自 AnimalIHasLegs 的对象?我不想在那个笼子里看到一条,也不想看到 table

------------编辑------------

谢谢大家的回答,但问题是:我真正想做的是:

public interface IClonable { ... }
public class MyTextBox : TextBox, IClonable { ... }
public class MyComboBox : ComboBox, IClonable { ... }

TextBox/ComboBox当然是一个Control。现在,如果我创建一个同时继承 Control 和 IClonable 的抽象类,我将失去我需要的 TextBox/ComboBox 继承。不允许多类继承,所以我必须使用接口(interface)。现在我又想到了,我可以创建另一个继承自 IClonable 的接口(interface):

public interface IClonableControl : IClonable { ... }
public class MyTextBox : TextBox, IClonableControl { ... }
public class MyComboBox : ComboBox, IClonableControl { ... }

然后

List<IClonableControl> clonableControls;

谢谢!!

最佳答案

首先,Animals对于类名来说是一个糟糕的选择,它将是 Animal .类名应该是单数。此类也应声明为 abstract ,因为它只是具体类型的基类,例如 Donkey .

其次,你可以定义一个名为LeggedAnimal的抽象类继承自 AnimalIHasLegs .然后你可以继承Donkey来自 LeggedAnimal

最后,您可以说 List<LeggedAnimal>一切顺利!

关于C# 同时声明类和接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19660647/

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