封装如何在C#Unity中运行?

时间:2018-01-29 06:17:25

标签: c# unity3d

这是我的代码:

 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
   }
}

2 个答案:

答案 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 }