我想要实现的是这个
// Base class
public Class ActiveRecord {
public static string CollectionName;
public static Collection() {
return CollectionInstance(CollectionName); // just pseudo code
}
}
// Child class
public Class Post : ActiveRecord
{
public static string CollectionName = "posts";
}
我知道php AR是以这种方式工作的(也许是红宝石),但不知道如何在C#中实现这一点,还是有另一种方法来实现这一目标?
答案 0 :(得分:0)
从mu的理解,你不能覆盖c#中的静态属性。
如果要覆盖它,则需要将其更改为实例属性,然后才能覆盖它。
// Base class
public Class ActiveRecord {
public virtual string CollectionName {get;}
public static Collection() {
return CollectionInstance(CollectionName); // just pseudo code
}
}
// Child class
public Class Post : ActiveRecord
{
public override string CollectionName { get{ return "posts";}}
}
答案 1 :(得分:0)
您无法使用静态字段或静态构造函数执行此操作。请注意,在C#中,静态构造函数的执行顺序为not under your control:
用户无法控制程序中何时执行静态构造函数。
因此,您无法保证派生的构造函数将首先执行并设置CollectioName。
此外,您尝试做的事情是不可能的,因为在调用任何派生的构造函数之前,首先执行基础构造函数。
此外,您无法从构造函数返回任何内容,因此该语句无效:
return CollectionInstance(CollectionName); // just pseudo code
你可以做的是:
// Base class
public class ActiveRecord {
public ActiveRecord(string name) {
CollectionInstance = new CollectionInstance(name); // just pseudo code
}
}
// Child class
public class Post : ActiveRecord
{
public Post(): base("posts"){}
}
或者这个:
// Child class
public class Post : ActiveRecord
{
private static readonly string CollectionName = "posts";
public Post(): base(CollectionName){}
}