如何在 C++/CLI 接口中声明默认索引属性

2024-01-01

如何在 C++/CLI 接口中声明默认索引属性。
(请原谅使用命名空间的重复、完全限定符号,因为我刚刚学习 C++/CLI,并且希望确保 C++ 和 C# 之间不会发生语言原语的意外混淆)

Code is

public interface class ITestWithIndexer
{
    property System::String ^ default[System::Int32];
}

编译器总是抛出“错误 C3289:‘默认’一个简单的属性无法索引”。
我的错误在哪里?

PS:在C#中,它只是

public interface ITestWithIndexer
{
    System.String this[System.Int32] { get; set; }
}

如何将其翻译成 C++/CLI?

Thanks!!


在 C++/CLI 中,“琐碎”属性是指未声明 getter 和 setter 的属性。对于不平凡的属性,getter 和 setter 是显式声明的,其语法比 C# 的属性语法更像普通的方法声明。

public interface class IThisIsWhatANonIndexedNonTrivialPropertyLooksLike
{
    property String^ MyProperty { String^ get(); void set(String^ value); }
};

由于索引属性不允许使用简单语法,因此我们需要对索引属性执行此操作。

public interface class ITestWithIndexer
{
    property String^ default[int]
    {
        String^ get(int index); 
        void set(int index, String^ value);
    }
};

这是我的测试代码:

public ref class TestWithIndexer : public ITestWithIndexer
{
public:
    property String^ default[int] 
    {
        virtual String^ get(int index)
        {
            Debug::WriteLine("TestWithIndexer::default::get({0}) called", index);
            return index.ToString();
        }
        virtual void set(int index, String^ value)
        {
            Debug::WriteLine("TestWithIndexer::default::set({0}) = {1}", index, value);
        }
    }
};

int main(array<System::String ^> ^args)
{
    ITestWithIndexer^ test = gcnew TestWithIndexer();
    Debug::WriteLine("The indexer returned '" + test[4] + "'");
    test[5] = "foo";
}

Output:


TestWithIndexer::default::get(4) called
The indexer returned '4'
TestWithIndexer::default::set(5) = foo
  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 C++/CLI 接口中声明默认索引属性 的相关文章

  • VBA Excel 提示用户选择默认文件夹中的文件

    我想提示用户在默认文件夹中打开 Excel 文件 我不知道如何打开默认文件夹 Sub Program1 DefaultFolder C user dump FName Application GetOpenFilename If FName
  • 我可以在 C++ 结构上实现 .ToString() 以进行调试吗?

    在 C 中 如果我定义了一个结构体 我还可以重写 ToString 然后 当我进行调试并添加监视或将鼠标悬停在结构的实例上时 工具提示将是计算出的 ToString 而不是结构的类型名称 我可以在 C 和 或 C CLI 中以某种方式做到这
  • VC++ 代码 DOM 可以从 VS 插件访问吗?

    Visual Studio IntelliSense for VC 包括 完整 EDG C 解析器 http www edg com location c frontend 英特尔和其他公司也使用 由于插件可以访问 C Code DOM 如
  • 当属性名称本身是动态变量时如何获取bean属性的值

    我正在尝试编写一个自定义 JSPX 标记 该标记从给定列表中的每个对象读取给定 bean 属性的值 并将该属性的名称作为 JSP 属性传递给该标记 该标签看起来像这样
  • 有没有办法找到哪些 .NET 类实现了某个接口?

    例如 如果我想查看我的 NET 选项用于实现 IList 或 IDictionary 有没有办法找到它 例如在 MSDN 文档中 我认为可以使用反射器 http www red gate com products reflector
  • 访问注释中的属性值

    我想访问注释中的属性值 作为属性的值 对于前 在我的属性文件中 我有一个条目表达式 3 10 在我的 Scheduler 类中 我使用注释 Scheduled cron VALUE 我想从表达式键对应的属性文件中读取这个值 尝试这样做 Va
  • 压缩 Log4j 文件

    是否可以压缩日志文件 我通过 RollingFileAppender 进行 log4j 附加功能 http logging apache org log4j extras 对此表示支持 只需将以下内容添加到您的RollingFileAppe
  • 界面与组合

    我想我理解接口和抽象之间的区别 抽象设置默认行为 在纯抽象的情况下 行为需要由派生类设置 接口是您所需要的 无需基类的开销 那么接口相对于组合的优势是什么 我能想到的唯一优点是在基类中使用受保护的字段 我缺少什么 你的标题没有意义 你的解释
  • unsigned char* 缓冲区到 System::Drawing::Bitmap

    我正在尝试创建一个工具 资产转换器 使用以下命令将字体光栅化为 XNA 游戏的纹理页面自由类型2 http www freetype org freetype2 index html engine 下面 第一张图片是FreeType2的直接
  • php 中接口的用途是什么?

    如果我在 PHP 中定义一个接口 以及一个创建该接口实例的工厂类 有什么方法可以强制客户端代码仅使用该接口而不使用底层具体类 根据我的理解 客户也可以实际使用底层类中的任何公共函数 字段 这是一个例子
  • 让按钮更容易点击

    我有一个按钮 在某些手机上由于尺寸太大而很难点击 但让它变大会破坏布局 可以向视图解释它有一个比其可见区域更大的 点击框 吗 不确定这是否有帮助 如果您使用没有背景的 ImageButton 并设置 Padding 值 您的按钮将具有更大的
  • 在 C++/CLI 中创建时初始化静态字典

    今天我看到创建静态字典并初始化它的 C 代码 public static readonly Dictionary
  • c++/cli 中的 gcroot

    gcroot 是什么意思 我在我正在阅读的代码中找到了它 gcroot 是一个 C cli 模板类 可以轻松地在 C cli 类中保存托管类型 例如 您可以拥有以下内容 include
  • 在实现接口的类上强制使用单例模式

    我最好用一个例子来解释这个问题 我有一个接口模型可用于访问数据 模型可以有不同的实现 可以以各种格式表示数据 例如 XMl txt 格式等 Model不关心格式 可以说这样的一个实现是myxml模型 现在我想强迫myxml模型以及其他所有实
  • NHibernate 中具有不同类型答案的问题

    我正在尝试找到一个问卷问题的简洁解决方案 假设我有一个Questionnaire类有一个集合Answers e g public class Questionnaire public virtual ISet
  • 具有不同返回类型的 C# 通用接口

    我有可以返回多种格式数据的网络服务 例如 json 和 xml 我正在针对此 Web 服务构建一个简单的 C api 我希望这些方法能够从 json 原始 json 或原始 xml 返回完全序列化的对象 例如 List
  • 鸭子在 Go 中打字

    我想写一个Join函数接受任意对象String 方法 package main import fmt strings type myint int func i myint String string return fmt Sprintf
  • 如何检索 iPhone 的区域设置

    我用谷歌搜索过它 但令我有点惊讶的是我找不到它 我只想访问设备配置的区域设置 我试图找到如何列出所有系统属性 以防我能在那里找到区域设置 但甚至找不到如何做到这一点 我知道 认为 我之前检索过系统属性 但我也记得在谷歌搜索时找到该信息并不容
  • 结构体实现接口安全吗?

    我似乎记得读过一些关于在 CLR 中通过 C 实现结构如何不好的内容 但我似乎找不到任何相关内容 是不是很糟糕 这样做会产生意想不到的后果吗 public interface Foo Bar GetBar public struct Fub
  • 您将整个应用程序中使用的常量保存在哪里?

    界面是存储我的信息的可接受的地方吗 public static final Foo bar 您是否推断它们可以从程序外部读取 你给它编了一个超级课吗 当情况出现时 你会怎么做 我会将每个常量放入与其最密切相关的类或接口中 例如 因为它将被其

随机推荐