Tag: abstract class

我可以从派生类的默认构造函数中将参数传递给基础构造函数吗?

假设我有一个抽象基类Deck: public abstract class Deck { public List cards; public Deck(string[] values, string[] suits) {…} … } 和派生类EuchreDeck: public class EuchreDeck : Deck { string[] values = new string[] { “9”, “10”, “J”, “Q”, “K”, “A” }; string[] suits = new string[] { “clubs”, “spades”, “hearts”, “diamonds” }; public EuchreDeck() : base(values, suits) // Error. […]

一种返回派生类实例的抽象方法

是否有可能创建一个必须返回派生类实例的抽象方法? 我可以做这个: abstract class Base { public abstract Base GetObj(); } class Derived : Base { public Derived() { } public override Base GetObj() { return new Derived(); } } 但我想知道是否有办法做到这一点, Derived::GetObj()被迫返回Derived ? 谢谢。

“公共”构造函数在抽象类中的相关性

抽象类中的“公共”构造函数是否有任何相关性? 我想不出任何可能的方法来使用它,在这种情况下不应该被编译器视为错误(C#,不确定其他语言是否允许)。 示例代码: internal abstract class Vehicle { public Vehicle() { } } C#编译器允许这个代码编译,而我无法从外部世界调用这个构造函数。 它只能从派生类调用。 所以不应该只允许’protected’和’private’修饰符。 请评论。

实现抽象方法时更改参数类型

有没有办法在抽象方法中将抽象类型定义为参数,并且当在派生类中实现该方法时,您是否更改方法的类型以接受派生类型? 码: public abstract class ProductBase { } public class SomeProduct : ProductBase { } public abstract class A { protected abstract void addProduct(ProductBase p); } // This works public class B : A { protected override void addProduct(ProductBase p) { // Do some work } } // This is what I’d like to do […]

C#inheritance

假设我有以下代码: interface ISomeInterface { void DoSomething(); void A(); void B(); } public abstract class ASomeAbstractImpl : ISomeInterface { public abstract void A(); public abstract void B(); public void DoSomething() { // code here } } public class SomeImpl : ASomeAbstractImpl { public override void A() { // code } public override void B() { // […]

代码契约:抽象类中的不变量

我在使用带有代码约定的不变量时遇到了问题。 我想在我的抽象类中定义一个Invariant,但它只是被忽略了。 下面的代码显示了我的界面和抽象类。 [ContractClass(typeof(IPointContract))] interface IPoint { int X { get; } int Y { get; } } [ContractClassFor(typeof(IPoint))] abstract class IPointContract : IPoint { public int X { get { return 0; } } public int Y { get { return 0; } } [ContractInvariantMethod] private void PointInvariant() { Contract.Invariant(X > Y); } } […]

是否可以使用派生参数而不是基础参数覆盖方法?

我陷入了这种情况: 我有一个名为Ammo的抽象类, AmmoBox和Clip作为子项。 我有一个名为Weapon的抽象类, Firearm和Melee是孩子。 Firearm是抽象的, ClipWeapon和ShellWeapon是孩子。 在Firearm内部,有一个void Reload(Ammo ammo); 问题是, ClipWeapon可以使用Clip和AmmoBox重新加载: public override void Reload(Ammo ammo) { if (ammo is Clip) { SwapClips(ammo as Clip); } else if (ammo is AmmoBox) { var ammoBox = ammo as AmmoBox; // AddBullets returns how many bullets has left from its parameter ammoBox.Set(clip.AddBullets(ammoBox.nBullets)); } } 但ShellWeapon只能使用AmmoBox重新加载。 我能做到这一点: […]

按字符串值获取类

我有一个带有一些派生类的抽象类 public abstract class MyObject { public string name { get; set; } public bool IsObject(string pattern); … } public class MyObjectA : MyObject { public string name { get { return “MyObjectA”; } set; } public bool IsObject(string pattern) { … } … } public class MyObjectB: MyObject { public string name { get […]

ASP.NET控制器基类User.Identity.Name

正如本文所述,我创建了一个抽象的基本控制器类,以便能够将数据从控制器传递到master.page。 在这种情况下,我想在我的数据库中查找用户,查询User.Identity.Name(仅当他登录时)。 但是,我注意到在这个抽象基类中, User属性始终为null 。 要做到这一点,我该怎么办? 非常感谢

抽象类和接口之间的区别

可能重复: 接口与基类 我不理解抽象类和接口之间的区别。 我什么时候需要使用哪种类型的艺术品?