在abstract基类中,如果我们有一些static字段,那么它们会发生什么?
它们的范围是从这个基类继承的类,还是从它继承的类型(每个子类都有自己static的abstract基类副本)?
是否有一种优雅的方法来获取具有自定义属性的程序集中的所有类型?
所以如果我有课
[Findable]
public class MyFindableClass
{}
Run Code Online (Sandbox Code Playgroud)
我希望能够在Assembly.GetTypes(...)返回的类型集合中找到它.
我可以用一个卑鄙的黑客来做,但我确信有人有更好的方式.
public class ClassA
{
public static readonly string processName;
}
public class ClassB : ClassA
{
static ClassB()
{
processName = "MyProcess.exe";
}
}
Run Code Online (Sandbox Code Playgroud)
编译上面的C#代码时出错.
错误说 - "无法分配静态只读字段(静态构造函数或变量初始化程序除外)"
但我在静态构造函数中分配它.
对这种静态变量的需求是,基类具有使用此变量的方法,但派生类和基类必须具有此变量的不同值.但是,相应类的所有实例的值都是常量.它必须是只读的,因为它不能被任何地方改变.
上面代码中的错误是什么?(如果有的话)我似乎无法发现一个.错误消息没有帮助.因为我根据它没有做错任何事.
如果出现错误,我该如何实现此功能?我知道一个简单的解决方法是使它成为一个实例变量,并在派生类中为它们分配不同的值.但这是不必要的,因为值在各个类的所有实例中是恒定的.
我的问题简要说明:
class A
{
/* Other stuff in my class*/
protected static staticMember;
}
class B : A
{
/* Other stuff in my class*/
// Will have A.staticMember but I want B.staticMember (same type)
}
class C : A
{
/* Other stuff in my class*/
// Will have A.staticMember but I want C.staticMember (same type)
}
Run Code Online (Sandbox Code Playgroud)
所以我希望我的所有派生类都有一个为该特定类共享的共享数据,但在基类中定义了一个共同的签名.
我正在创建一个简单的RTS游戏,以便在我的空闲时间玩转.有几种单位(宇宙飞船,建筑物等)具有一些基本属性.这些单位可以由玩家升级(属于同一玩家的所有相同类型的单位都升级,例如.玩家A升级坦克的装甲意味着他的所有坦克将拥有更好的装甲.)
以下是我尝试实现此目的的方法:
abstract class Unit
{
/*several methods that is common for all units*/
/*We don't know the unit's attributes at …Run Code Online (Sandbox Code Playgroud)