加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在c#中引用时,VB程序集中的默认公共只读属性不会出现

发布时间:2020-12-15 22:04:18 所属栏目:百科 来源:网络整理
导读:当我尝试在C#App中使用VB程序集中的属性时遇到问题. VB程序集是在.NET 1.1中创建的,我尝试使用它的应用程序是C#中的.NET 4.5.我查看了VB程序集的代码,并注意到在C#App中实例化对象时未出现的程序集中的属性是声明为Default Public ReadOnly Property的属性.
当我尝试在C#App中使用VB程序集中的属性时遇到问题. VB程序集是在.NET 1.1中创建的,我尝试使用它的应用程序是C#中的.NET 4.5.我查看了VB程序集的代码,并注意到在C#App中实例化对象时未出现的程序集中的属性是声明为Default Public ReadOnly Property的属性.如果我删除Default关键字,则该属性将出现在C#对象中.但是这里的问题是dll用于VB中创建的许多其他应用程序中,并且在这些应用程序中不存在此问题.我没有可能只为我的代码更改此DLL.

以下是我发生的事情的一个例子:

VB汇编代码

Default Public ReadOnly Property MyProperty(ByVal value As String) As String
    Get
        ...
    End Get
End Property

在C#实例化对象中,除非从中删除Default关键字,否则此属性永远不会出现.

解决方法

我在C#中创建了一个测试项目并执行以下操作:

var foo = new Class1();
        Console.WriteLine(foo.MyProperty("Hello")); // Compile-time error
        Console.WriteLine(foo.get_MyProperty("Hello")); // Compile-time error: 'Test1.Class1.this[string].get': cannot explicitly call operator or accessor
        Console.WriteLine(foo.GetType().GetProperty("MyProperty").GetGetMethod().Invoke(foo,new object[]{"Hello"}));   // Works
        Console.WriteLine(foo["Hello"]);            // Works

在C#中访问索引器的常规方法是最后一行,这是有效的. Intellisense不显示MyProperty属性,尝试调用它会产生编译时错误.但看起来我可以通过反思来访问它.

在C#中使用索引器的documentation显示了使用属性为其他语言指定索引器名称的代码,因此我猜测C#不支持以这种方式调用索引器.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读