在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#不支持以这种方式调用索引器. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |