gpt4 book ai didi

c# - 当名称与返回的数据类型相同时,属性会重命名

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:20:56 24 4
gpt4 key购买 nike

我遇到了以下问题:

我的接口(interface)是用 C# 定义的。我在我的界面中使用自定义枚举。一些枚举与它们返回的数据类型同名,例如:

Foo Foo { get; }
Bar Bar { get; }

我使用 tlbexp 在 C++ 中使用模块。与其数据类型共享名称的属性从“Name”重命名为“_Name”:

Bar myEnumValue = pFoo->Bar // does not exist

Bar myEnumValue = pFoo->_Bar // is my 'Bar'-Property

到目前为止,我没有找到任何关于原因以及我是否/如何能够阻止这种情况的文档。我在构建或导出期间没有收到任何警告。为了使我的模块的使用直观,我不想重命名属性或枚举。

谁能解释一下为什么会这样?

最佳答案

在 C++ 中这是不允许的:

class B {};
class A {
B B;
};

因为[basic.scope.class] 3.3.7/1:

A name N used in a class S shall refer to the same declaration in its context and when re-evaluated in the completed scope of S. No diagnostic is required for a violation of this rule.


请注意,这仅适用于类内部的声明,对于命名空间范围或函数范围,规则更为复杂 - 有时 B B; 是允许的,有时则不允许。


更新:实际上这是完全有效的:

class B {};
class A {
::B B;
};

所以你可以尝试让tlbexp生成这样的代码。

关于c# - 当名称与返回的数据类型相同时,属性会重命名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26420320/

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