这是我的代码:
beforeEach(() => {
fixture = TestBed.createComponent(ListPropertyComponent);
comp = fixture.componentInstance;
comp.ngOnInit();
});
it('should create component', () => expect(comp).toBeDefined());
我的问题在于代码的注释行:
我不确定是不是。有人会帮助我理解并请解释。我只是C#的初学者。
以下是整个代码:
protected override IEnumerator InitUI()
{
//some code here
{ //---> is this encapsulation or a class inside of a function?
//some code here
}
}
答案 0 :(得分:4)
函数内部的代码块{}
就是嵌套代码块。
使用它可以正确地分隔某些代码行。在该块中,定义的所有变量在块外不可见。
是封装还是函数内部的类?
绝对不是另一类。
我可以理解为什么要将其称为封装,但这不是本案例中使用的词。面向对象编程中的 Encapsulation 比仅仅隐藏代码块中的一些变量要强大得多。
作为个人偏好,我倾向于为此创建一个全新的私有函数,至少可以为这段代码提供有意义的名称。
(但是从块内部使用的任何变量都必须作为参数传递)
void yourFunction()
{
// some code
{
// some inner code
}
}
我会这样写:
void yourFunction()
{
// some code
innerFunction();
}
void innerFunction()
{
// some inner code
}
为了澄清,下面的代码是大多数专业程序员用术语“enacpsulation”表示的一个例子。在这种情况下,您的变量受到所谓的“getters”和“setter”的保护。
public class RPGCharacter
{
private int health;
public int Health
{
get { return health; }
set {
health = value;
if(health <= 0)
{
health = 0; // force zero as min value
this.Die();
}
}
}
void Die() {
Debug.Log("No more health, you died !");
}
}
在这个例子中,我已经成功地封装了我的私有“健康”值,并且这样做我保护了RPGCharacter的健康状况低于0,因为这没有意义。
答案 1 :(得分:2)
为了说清楚,这个问题与编码问题无关,而是与概念的解释无关。
“封装”是指您必须“打包”并“保护”类中的所有基本变量/方法。因此,大多数情况下,您将使用private
属性使其无法访问。
protected class InitUI()
{
private int a,b,c;
private sum()
{
c = a + b;
}
}
然后我们说InitUI是封装的。回答你的问题:
protected override IEnumerator InitUI()
{
//some code here
{ //---> is this encapsulation or a class inside of a function?
//some code here
}
}
它不是一个类,不是一个函数,也不是一个封装。只是一个简单的代码块,它可以使用或不使用括号{ //some code here }