相关疑难解决方法(0)

什么是静态方法继承的正确替代方法?

我知道C#不支持静态方法继承.我还阅读了许多讨论(包括此处),其中开发人员声称需要此功能,典型的响应是"如果您需要静态成员继承,那么您的设计就存在缺陷".

好吧,鉴于OOP不希望我甚至考虑静态继承,我必须得出结论,我对它的明显需求指出了我的设计中的错误.但是,我被困住了.我真的很感激帮助解决这个问题.这是挑战......

我想创建一个抽象基类(我们称之为Fruit),它封装了一些复杂的初始化代码.此代码不能放在构造函数中,因为其中一些代码将依赖于虚方法调用.

Fruit将由其他具体类(Apple,Orange)继承,每个类必须公开标准工厂方法CreateInstance()以创建和初始化实例.

如果静态成员继承是可行的,我会将工厂方法放在基类中,并使用对派生类的虚方法调用来获取必须从中初始化具体实例的类型.客户端代码可以简单地调用Apple.CreateInstance()来获取完全初始化的Apple实例.

但显然这是不可能的,所以有人可以解释我的设计需要如何改变以适应相同的功能.

.net c# inheritance static

79
推荐指数
2
解决办法
4万
查看次数

C#:如何从派生类的静态方法调用基类的静态方法?

在C#中,我有基类Product和派生类Widget.

产品包含静态方法MyMethod().

我想从静态方法Widget.MyMethod()调用静态方法Product.MyMethod().

我不能使用base关键字,因为它只适用于实例方法.

我可以显式地调用Product.MyMethod(),但如果我稍后将Widget更改为从另一个类派生,我必须修改该方法.

C#中有一些类似于base的语法允许我从派生类的静态方法中调用基类的静态方法吗?

c# inheritance static base derived-class

17
推荐指数
1
解决办法
4万
查看次数

我可以有一个基类,每个派生类都有自己的静态属性副本吗?

我有以下情况如下:

class Base
{
     public static int x;
     public int myMethod()
     {
          x += 5;
          return x;
     }

}

class DerivedA : Base
{
}

class DerivedB : Base
{
}
Run Code Online (Sandbox Code Playgroud)

我试图设置它,以便每个派生类都有自己的静态x实例,如果我做这样的事情:

 DerivedA.x = 5;
 DerivedB.x = 10;
Run Code Online (Sandbox Code Playgroud)

然后当我跑:

 DerivedA.myMethod(); //The result will be 10
 DerivedB.myMethod(); //The reusult will be 15
Run Code Online (Sandbox Code Playgroud)

我可以这样做吗?如何设置派生类来实现这一目标?多谢你们.

编辑:基本上,我有一堆派生类,每个类都有一个该类独有的属性.它不会因每个实例而异,因此我认为应该是一个静态变量.此外,该属性由方法设置,对于每个类都是相同的.我试图避免在每个派生类中复制和粘贴该属性和方法的逻辑.我认为最好以某种方式将该逻辑移动到从中派生每个类的基类.但是,我需要每个派生类都有自己的属性副本.我不一定要这样做,如果你们有任何好的话,我会很高兴听到一些更好的做法建议..谢谢!

c# inheritance base-class derived-class

5
推荐指数
2
解决办法
5729
查看次数

标签 统计

c# ×3

inheritance ×3

derived-class ×2

static ×2

.net ×1

base ×1

base-class ×1