Implementar el ámbito de X++ y los identificadores de acceso
El ámbito es el área donde se encuentra un elemento o se puede tener acceso al mismo. Las variables y métodos X++ están dentro de un ámbito definido. El ámbito se puede establecer mediante la colocación de la declaración y el uso de identificadores de acceso.
Los identificadores de acceso son [public], [protected] y [private].
- Público: los métodos que se declaran como públicos pueden ser llamados desde cualquier lugar donde la clase sea accesible. Asimismo, una subclase puede anular un método público, a menos que el método se declare como final.
- Protegido: los métodos protegidos pueden anularse en subclases. Los métodos declarados como protegidos solo se pueden llamar desde:
- Métodos en la clase.
- Métodos en una subclase de la clase que contiene el método protegido.
- Privado: los métodos que se declaran como privados solo se pueden llamar desde los métodos de la clase donde se declara el método privado. No se puede anular ningún método privado en una subclase. Cuando crea un nuevo método, la palabra clave de acceso predeterminada que aparece en el editor de código es privada. Se trata del valor predeterminado más conservador para la máxima seguridad.
Interno
Interno es una palabra clave en X++. Tiene la misma semántica que en C#; consulte internal (Referencia de C #).
Cuando selecciona una clase o método con el valor interno, solo se puede obtener acceso a dicha clase o método desde dentro del modelo donde se define.
internal class MyInternalClass
{
internal void myInternalMethod()
{
}
}
Como puede ver, también puede definir métodos internos en clases públicas.
Variables de instancia
Las variables de instancia tienen un gran ámbito y también se conocen como campos de clase en X++. Estas variables se declaran en la declaración de clase y se puede obtener acceso a ellas desde cualquier método de la clase y las subclases que extiendan la clase si se declaran públicas o protegidas.
Variables locales
Las variables locales tienen un ámbito pequeño. Estas variables se definen en un método y solo se puede tener acceso a ellas desde ese método.
Los parámetros son un tipo de variable local que se define en un método.
Para usar una variable de un ámbito a otro, la variable debe pasarse usando parámetros. Los métodos pueden usar múltiples parámetros. Los parámetros se tratan como variables locales y se inicializan con el valor del parámetro en la llamada al método. En el ejemplo siguiente, el método de clase tiene dos parámetros que dan acceso method1 a cuatro variables. Se puede tener acceso a las variables de instancia a y b y los parámetros x e y actúan como variables locales. El uso de parámetros permite asignar valores a esos parámetros cuando se llama al método. Si se llama a method1 usando el código Test.method1(a,b);, a la variable x se le asignará el valor Car y a la variable y se le asignará el valor 20. Luego puede usar los valores de las variables de parámetro para asignar valores a las variables de instancia c y d.
class Test
{
str a = "Car";
int b = 20;
str c;
int d;
void method1(str x, int y)
{
c = x;
d = y;
}
}
Tenga en cuenta que cuando pasa un valor por varios parámetros, el valor de la variable original no cambia de forma predeterminada. El término para denominar esta operación es "llamada por valor" en lugar de "llamada por referencia". Solo se cambia la variable local.
Ejemplo
En el siguiente ejemplo, method2 tiene una variable local a con un valor de 5. La primera declaración info() muestra el valor de a, que es 5. Llama a method1 y pasa el valor de su variable local a. Método 1 ahora tiene una variable local diferente a, con el valor de 5. A continuación, Method1 incrementa el valor en uno, lo que hace que a tenga el valor 2. La declaración info() muestra a continuación el valor de 2. El código volverá a method2, ejecutará la segunda instrucción info() y mostrará el valor 5. Este resultado se debe a que aunque el nombre de la variable sea el mismo, el ámbito es exclusivo de sus respectivos métodos.
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));
}
}
En la siguiente imagen se muestra cómo aparece info en la interfaz de usuario.
