gpt4 book ai didi

c# - 我可以使用什么 hack 来定义与类同名的 C# 属性?

转载 作者:太空狗 更新时间:2023-10-29 18:16:44 26 4
gpt4 key购买 nike

我正在使用 C# 制作一个将广泛分发的 .Net 类库(DLL)。我有一个名为 Value 的抽象类,我希望它有一个抽象的 double 属性,也称为 Value

public abstract class Value {

// Only accessible by subclasses within the project.
internal Value() {}

public abstract double Value {
get;
}

}

但 C# 编译器不允许这样做 - 我收到消息“成员名称不能与其封闭类型相同”,如讨论的那样 here .

我知道最简单的方法是更改​​属性的名称或类的名称......但我真的希望名称像那样,我很乐意实现一个丑陋的黑客以这种方式获得它。只要它能从使用此 DLL 的外部代码正常工作。

与 C# 不同,VB.Net 允许我定义一个与类同名的属性,因此我目前正在研究将我的 C# 项目与定义 Value 类(及其 Value 属性)来制作一个 DLL。这似乎并不像我希望的那么简单。

另一种选择是用 VB 重写整个项目……不是很吸引人,但如果有必要我会考虑。我更喜欢 C# 而不是 VB.Net,但我的首要任务是按照我想要的方式获取构建的 DLL。

我想知道还有哪些其他选择。有破解此问题的好方法吗?

编辑:从下面的评论中可以清楚地看出,相当多的人对类的名称“值(value)”没有太多的看法……谁能解释为什么它这么糟糕?我知道它的描述性不强,但我认为它很适合我的项目上下文。是因为它是 C# 中用于属性 setter 的关键字吗?

最佳答案

你不能直接这样做。但是,您可以考虑:

  • Value 成员实现一个接口(interface),并使用显式接口(interface)实现(尽管调用者可以使用该接口(interface))
  • 在类中重命名它,并使用扩展方法公开一个 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; } }
}

关于c# - 我可以使用什么 hack 来定义与类同名的 C# 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7860291/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com