实现 X++ 范围和访问标识符

已完成

范围是项目所在的区域或可以访问的区域。 X++ 变量和方法在定义的范围内。 可以通过放置声明和使用访问标识符来设置范围。

访问标识符包括 [public][protected][private]

  • 公共 - 可以从可访问类的任意位置调用声明为公共的方法。 此外,公共方法可以由子类替代,除非该方法声明为最终方法。
  • 受保护 - 可以在子类中替代受保护的方法。 只能从以下位置调用声明为受保护的方法:
    • 类中的方法。
    • 包含受保护方法的类的子类中的方法。
  • 专用 - 只能从声明专用方法的类中的方法调用声明为专用的方法。 不能在子类中替代任何专用方法。 当创建新方法时,在代码编辑器中显示的默认访问器关键字为专用。 “专用”是最保守的默认值,可获得最大安全性。

内部

内部 是 X++ 中的关键字。 它的语义与在 C# 中相同,请参阅内部(C# 引用)

当您将类或方法选择为内部时,只能从定义它的模型中访问它。

internal class MyInternalClass
{
   internal void myInternalMethod()
   {
   }
}

请注意,您也可以在公共类上定义内部方法。

实例变量

实例变量具有较大的范围,在 X++ 中也称为类字段。 这些变量在类声明中声明,并且可以从在类和扩展该类的子类中的任何方法(如果它们是声明的公共方法或受保护方法)访问。

局部变量

本地变量具有较小的范围。 这些变量在方法中定义,并且只能在该方法中访问。

参数是一种在方法上定义的局部变量。

要将变量从一个范围使用到另一个范围,必须使用参数传递该变量。 方法可以使用多个参数。 这些参数被视为局部变量,并使用方法调用中的参数中的值初始化。 在下面的示例中,类方法有两个参数,它们使 method1 可以访问四个变量。 可以访问实例变量 ab,参数 xy 用作局部变量。 使用参数允许在调用方法时将值分配到这些参数。 如果使用代码 Test.method1(a,b); 调用 method1,将向 x 变量分配值 Car,并向 y 变量分配值 20。 然后,您可以使用参数变量的值将值分配到实例变量 cd

class Test
{
   	 str a = "Car";
     int b = 20;
 	 str c;
 	 int d;

    void method1(str x, int y)
        {
          c = x;
          d = y;
        }
}

请注意,当通过参数传递值时,默认情况下不会更改原始变量的值。 它的术语是“按值调用”,而不是“按引用调用”。仅更改局部变量。

示例

在以下示例中,method2 具有一个值为 5 的局部变量 a。 第一个 info() 语句显示 a 的值,该值为 5。 它调用 method1 并传递其局部变量 a 的值。 Method1 现在具有不同的局部变量 a,其值为 5。 然后,Method1 将值增加 1,使 a 的值为 2。 然后,info() 语句显示值为 2。 代码将返回到 method2,运行第二个 info() 语句并显示值 5。 出现此结果,是因为即使变量名称相同,其各自方法的范围也是唯一的。

class infoValue
{
     void method1(int a)
     {
       a = 1;       
       a = a ++;
       info(int2str(a));
     }

	  void method2()
      {
        int a = 5;
        info(int2str(a));
        this.method1(a);
        info(int2str(a));
      }
}

下图显示 info 在用户界面中的显示方式。

本屏幕截图显示 info 方法在用户界面中的显示方式。