Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 抽象类成员无法访问,因为它';s保护级别_C#_Oop - Fatal编程技术网

C# 抽象类成员无法访问,因为它';s保护级别

C# 抽象类成员无法访问,因为它';s保护级别,c#,oop,C#,Oop,如何访问abtsract类的受保护成员?假设我有如下定义的类 public abstract class BaseClass { private int index ; protected int GetIndex { get { return index ;} set { index = value; } } } public class MyClass : BaseClass { ... } public cla

如何访问abtsract类的受保护成员?假设我有如下定义的类

public abstract class BaseClass
{
    private int index ;

    protected int GetIndex
    {
        get { return index ;}
        set { index = value; }
    }
}

public class MyClass : BaseClass
{
     ...
}

public class TestClass
{
     var data = new MyClass()
     var index = data.GetIndex;
}
线路

var index = data.GetIndex;
投诉由于其保护级别而无法访问。如何在TestClass中访问MyClass的GetIndex属性


-Alan-

您的问题正是受保护的的用途

保护字段/方法不被基类或子类的外部使用。TestClass不是从基类或MyClass派生的;而且你不能访问GetIndex。就这么简单

因此,您的选择空间是:

  • 替换基类上受保护的
  • 在MyClass中提供其他方法来检索/设置该属性
  • 将TestClass更改为从基类派生

  • 该列表中没有具体的顺序;但很明显,选项3是这里“最差”的选择。

    您的问题正是受保护的的用途

    保护字段/方法不被基类或子类的外部使用。TestClass不是从基类或MyClass派生的;而且你不能访问GetIndex。就这么简单

    因此,您的选择空间是:

  • 替换基类上受保护的
  • 在MyClass中提供其他方法来检索/设置该属性
  • 将TestClass更改为从基类派生
  • 该列表中没有具体的顺序;但很明显,选项3是这里“最差”的选项。

    使用以下选项:

    public abstract class BaseClass
    {
        public int GetIndex { get; private set; }
    
        public BaseClass() { GetIndex = 0; }
    }
    
    然后,您可以仅在基类中设置GetIndex(您的可验证索引是私有的),或者:

    使用以下命令:

    public abstract class BaseClass
    {
        public int GetIndex { get; private set; }
    
        public BaseClass() { GetIndex = 0; }
    }
    
    然后,您可以仅在基类中设置GetIndex(您的可验证索引是私有的),或者:


    公开、内部或使用反射?这不是受保护标识符的重要用途。您可以将其公开或内部..为什么希望受保护的成员可以在类/派生类的成员之外访问?非常不清楚您试图实现什么。注意:属性不应包含文本
    Get
    Set
    。如果属性表示索引,那么您应该这样命名
    int index{get;set;}
    将其公开或内部或使用反射?这不是受保护标识符的重要用法。您可以将其公开或内部..为什么希望受保护的成员可以在类/派生类的成员之外访问?非常不清楚您试图实现什么。注意:属性不应包含文本
    Get
    Set
    。如果属性表示一个索引,那么您应该这样命名
    intindex{get;set;}
    ,如果它是某个单元测试目录中的一个特定测试类。。。也许吧,如果它是某个单元测试目录中的一个特定测试类。。。大概