定义子类的私有参数

问题描述 投票:-1回答:1

我正在尝试一个项目以在内部函数中使用私有值。过去,我只使用公共参数,但是我注意到使用尽可能多的私有参数时,混淆处理效果更好。

我的问题与父母/子女班级有关。

在我的主类中,我定义所有参数如下:

public class MyFatherClass
{
    private long id = -1;
    public long ID { get { return this.id; } set { this.id = value; } }    
    ...
}

因此,在所有内部函数中,我都使用私有值而不是公共值。

然后在我的子类中,我只添加了特定于子类的参数。

public class MyChildClass : MyFatherClass
{
    private long anotherParameter = -1;
    public long AnotherParameter { get { return this.anotherParameter; } set { this.anotherParameter = value; } }    
    ...
}

[仅,我看到在我的父类中,我可以毫无问题地访问idID,但是从子类中,我只能访问ID(因为id是私有的。

如果我理解正确,我将需要在我的父级文档中将所有private替换为protected,这样可以解决问题吗?我不理解的是,即使我保留了代码,代码仍在工作。为什么我在子类中设置ID值时却没有错误消息,但执行了句子this.id=value,但是如果我的子类是私有的,如何从子类中访问它呢?

我现在很犹豫,可以在每个子类中添加private id,还是可以在父类中将id设置为protected?

感谢您的解释。

c# oop private encapsulation protected
1个回答
1
投票

这里是对[[访问修饰符的作用的简短描述:

  • Public:itslef类,其子级和任何其他外部类可见和访问字段(变量)和属性(变量封装)以及方法(函数和过程)。

  • Private

  • :成员(字段,属性和方法)仅在类中可见,并且只能由其类,其子级或任何外部类访问。
  • Protected

  • :成员可以通过该类及其子级看到,但不能被其他类访问。​​
  • Internal

  • :成员可以通过该类及其子级以及同一程序集(.exe和.dll)中的任何类(而不是另一个程序集中的类)看到和访问。 >因此,您应该在父类中将id设置为protected以便在子代中使用它。

但是这是规则:

  • 如果子类可以修改id,则应将其设置为受保护的字段,并提供公共属性(获取)(如果可用于外部项目。)

  • 如果不允许childs类进行修改,则应将其设置为private并提供:
    • 一个预期的属性,如果外部项目无法访问它,则只有一个吸气剂。

    • 只有外部对象可以访问的带有吸气剂的公共财产。

    不要重复使用相同名称的成员,否则它将

    隐藏

父成员,并且可能导致多态性问题,否则您就会知道自己的工作。
您可以阅读这些教程,以进一步了解访问修饰符关键字:

C# Access Modifiers

Access Modifiers (C# Reference)

这里有一些读物:

C# Tutorial Level 0C# Tutorial Level 1C# Tutorial Level 2C# Tutorial Level 3

© www.soinside.com 2019 - 2024. All rights reserved.