我正在尝试一个在我的内部函数中使用私有值的项目。过去我只使用公共参数,但我注意到当使用尽可能多的私有参数时,混淆效果会更好。
我的问题是关于家长/儿童课程。
在我的主类中,我定义了所有参数如下:
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; } }
...
}
只是,我看到在我的家长班级中,我可以访问id
and ID
没有问题,但是从子类中我只能访问ID
(as id
是私人的)。
如果我理解正确的话,我需要更换所有private
by protected
在我父母的女儿身上,这样就能解决问题吗?
我不明白的是,即使我保留它,代码仍然可以工作。
为什么我设置的时候没有出现错误信息ID
女儿班的价值,这句话this.id=value
已执行,但如果它是私有的,我如何从我的子类访问它?
我现在正在犹豫,我可以添加一个吗?private id
在每个孩子的班级中,或者我可以设置id
在我的父类中受到保护?
感谢您的解释。
编辑,只需在混淆后添加我的反向代码的屏幕截图,这样您就可以理解如何混淆私有/公共方法/字段的差异
为什么我没有错误消息,当我在子类中设置ID值时,这句话this.id=value
已执行,但如果它是私有的,我如何从我的子类访问它?
当您调用类上的公共方法时,该方法可以访问该类的私有成员:
public class Foo
{
public void Bar()
{
Baz();
}
private void Baz()
{
// private method called by public method
}
}
var foo = new Foo();
foo.Bar();
这编译得很好。您的 setter 是相同的:它是公共的,因此可以从任何地方调用,即使它访问私有成员也是如此。
至于让你的领域(private long id = -1;
) protected:是的,这意味着您可以在派生类中访问它。但你是否愿意是另一个问题。
您出于某种原因宣布了公共财产。也许您想在其 setter 或 getter 中进行一些验证。如果没有,如果您只是使用属性来访问私有字段,则可以放弃整个私有字段并使用自动实现的属性:
public long ID { get; set; } = -1;
然后,您可以从任何地方访问该属性,从其内部、从派生类以及从使用此类的代码。
也可以看看:
- 字段和属性有什么区别?
- C# 中的自动属性是什么?它们的用途是什么?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)