【问题标题】:Protection level of method to use with generics与泛型一起使用的方法的保护级别
【发布时间】:2013-06-11 11:47:39
【问题描述】:

我的泛型类定义如下:

public class MySortedList<TKey, TItem> where TItem : MyClass<TKey>

在一个类的方法中,我创建了一个 TItem 实例并调用它的一个受保护方法:

TItemInstance.MyMethod();

在这里我得到了错误

MyMethod 由于其保护级别而无法访问

MyMethod 应该有什么级别的保护?
谢谢。

【问题讨论】:

  • 你有MyMethod函数的类必须是public
  • 应该是publicinternal,因为它是从外部使用的TItem

标签: c# generics protection


【解决方案1】:

声明为protected的方法只能在类及其子类中使用。

如果你想使用类外的方法,你应该将它声明为public:

public void MyMethod()

或者,如果调用者在同一个程序集中定义,internal:

internal void MyMethod()

【讨论】:

  • 相同的程序集 = 相同的命名空间?
  • @YevgeniGrinberg,不完全是。程序集是库,exedll 文件。在您的情况下,这很可能是您正在使用的项目。然而,命名空间是您的类型的逻辑方式或组织。一个命名空间可以在多个程序集中声明。这是a good post,它深入描述了这些概念。
【解决方案2】:

因为MySortedList 不是从TItem 派生的,所以您需要公开有问题的方法才能从MySortedList 调用它。

您只能从定义类或其派生类之一调用受保护的方法。

更多详情请见the Microsoft documentation

【讨论】:

    【解决方案3】:

    您拥有MyMethod 函数的类必须声明为public,因为这里您想在类外使用该方法。所以应该是public

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-28
      • 2022-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多