我正在使用C#来创建一个将广泛分发的.Net类库(DLL).我有一个名为的抽象类Value,我希望它有一个double也称为Valueie 的抽象属性
public abstract class Value {
// Only accessible by subclasses within the project.
internal Value() {}
public abstract double Value {
get;
}
}
Run Code Online (Sandbox Code Playgroud)
但C#编译器不会允许这样-我得到的消息"成员名称不能与它们的封闭类型",作为讨论在这里.
我知道最简单的事情就是更改属性的名称或类的名称......但实际上我希望这些名称是这样的,我很高兴实现一个丑陋的黑客来获取就这样.只要它从使用此DLL的外部代码正常工作即可.
与C#不同,VB.Net 将允许我定义一个与类同名的属性,所以我目前正在研究将我的C#项目与一个VB项目合并,该项目定义了一个Value类(及其Value属性)来制作一个DLL.这似乎并不像我希望的那么简单.
另一种选择是在VB中重写整个项目...不是很吸引人,但如果有必要,我会考虑它.我更喜欢C#而不是VB.Net,但我的首要任务是以我想要的方式获取构建的DLL.
我想知道其他可能的选择.有什么想法可以解决这个问题吗?
编辑:从下面的评论中可以清楚地看到,很多人并不认为课堂上的"价值"这个名字太多了......难道有人会解释为什么这么糟糕吗?我知道它不是很具描述性,但我认为它非常适合我的项目.是因为它是C#中的一个关键字,用于属性设置器吗?
你不能直接这样做.但是,您可以考虑:
Value成员的接口,并使用显式接口实现(调用者将使用接口,但)Value()方法,所以obj.Value()工作Value在子类中公开它丑陋的黑客:
public abstract class ValueBase {
public abstract double Value { get; }
internal ValueBase() {}
}
public abstract class Value : ValueBase {
internal Value() {}
}
public sealed class ValueReal : Value {
public override double Value { get { return 123; } }
}
Run Code Online (Sandbox Code Playgroud)