我怎样才能使c ++中的函数成为C#中的属性?

时间:2013-05-03 15:37:51

标签: c# c++ c++-cli

我在C ++中有这个功能:

List<String^> ^GetCodecs()
    {
        List<String^> ^l = gcnew List<String^>;

        String ^s;

        for (int i=0;i<3333;i++)
        {
        s = gcnew String(Encoder_GetCodecName( i ));
        l->Add(s);
        }

        return l;
    }

这是在C#我得到了List:

List<string> l = new List<string>(f.GetCodecs());

所以我包含3333个索引,其中一些填充了编解码器的名称。

我现在要做的是在C#而不是:List l = new List(f.GetCodecs());

以某种方式,我将能够做到例如:

f.GetCodecs。

当我点击GetCodecs之后的点时,它会打开一个新的大型编解码器列表,我可以用箭头向下和向上移动,然后选择我想要的那个。

像财产或类似的东西。而不是现在的列表。

编辑!

示例:

我正在做f.getcodecs。

在最后一点之后,我将看到像这样的编解码器:

mpej XVID 的DivX

我会立刻看到它们而不需要循环它。

3 个答案:

答案 0 :(得分:2)

以下是我认为你在问的问题:

  

当我在C ++编辑器中输入f.GetCodecs. 时,我希望 IDE   之后显示编解码器列表,以便我可以从中选择一个项目   列表,而不必键入f.GetCodecs.mpegCodec

如果这就是你想要的,那么你需要GetCodecs(或者,如果它是一个方法,则返回一个带有字段/方法的对象)。您必须选择在设计对象时出现的名称,例如,它不会基于机器上安装的编解码器。

答案 1 :(得分:0)

如果我正确解释您的问题,可以在CodeProject上找到一篇很好的文章,向您展示如何执行此操作:C++/CLI Properties - Syntactic sugar for accessor methods

答案 2 :(得分:0)

您需要明确地将其设为属性:

property List<String^> ^GetCodecs
{
    List<String^>^ get()
    {
        List<String^> ^l = gcnew List<String^>;
        String ^s;

        for (int i=0;i<3333;i++)
        {
            s = gcnew String(Encoder_GetCodecName( i ));
            l->Add(s);
        }

        return l;
    }
}

我没有准备好编译器,所以我无法测试这段代码,但是你明白了。可以找到更多详细信息here