Prefacio
Este artículo trata sobre los conocimientos básicos de C#. Es un resumen basado en un cierto conocimiento del lenguaje C o C++. Por lo tanto, se omitirán muchos conocimientos básicos del lenguaje C. Sin embargo, algunos conocimientos exclusivos de C# o relativamente raros o importantes en El lenguaje C también se resumirá en la publicación del blog.
Herede el conocimiento introductorio de C# anterior https://blog.csdn.net/danielxinhj/article/details/130401403
Tabla de contenido
C. Conversión de tipo de enumeración (no se usa comúnmente)
a. Matriz entrelazada (casi requiere interés para comprenderla)
1. Cadena de tipo de referencia especial
1. Funciones con parámetros y múltiples valores de retorno.
1.ref es un modificador de parámetros de función
2.out también es un modificador de parámetros de función
5. Parámetros de longitud variable y valores predeterminados de los parámetros
1.Palabra clave de parámetro de longitud variable
2. Valores predeterminados de los parámetros
1. Tipos de datos complejos
Dos tipos:
- Recopilación de datos: datos compuestos por múltiples datos (variables) reunidos.
- Personalización: Podrás elegir tu propio nombre y datos personalizados (variables).
Incluyendo: enumeración, matriz, estructura.
1. Enumeración
una definicion
Es una colección de constantes enteras con nombre, generalmente estado y tipo.
//枚举名 以E或者E_开头,作为我们的命名规范
enum E_自定义枚举名
{
自定义枚举项名字1, //默认第一个值是0 下面依次累加
自定义枚举项名字2,
自定义枚举项名字3,
}
Si asigna un valor a uno de los elementos de la enumeración, los elementos siguientes se incrementarán sobre esta base a menos que se cambie nuevamente de forma artificial.
b.Declaración
- Generalmente declarado en el bloque de declaración del espacio de nombres.
- Se puede utilizar en el bloque de declaración de clase.
- Se puede utilizar en el bloque de declaración de estructura.
- ¡No se puede declarar en una función! ! !
Fórmula: nombre de variable de tipo de enumeración personalizado = valor predeterminado (tipo de enumeración personalizado. Elemento de enumeración)
enum E_PlayerType
{
Main, //默认第一个值是0 下面依次累加
Other,
}
E_PlayerType playerType = E_PlayerType.Main;
Las enumeraciones y declaraciones de cambio son muy adecuadas. Escriba constantes entre corchetes de cambio y se completarán automáticamente más adelante.
C. Conversión de tipo de enumeración (no se usa comúnmente)
// 枚举和int互转
int i = (int)playerType;
Console.WriteLine(i);
// 枚举和string相互转换
string str = playerType.ToString();
Console.WriteLine(str);
// string转为枚举
// Parse后 第一个参数:你要转为的是哪个 枚举类型 第二个参数:用于转换的对应枚举项的字符串
playerType = (E_PlayerType)Enum.Parse(typeof(E_PlayerType),"other");
2.matriz
El mismo principio que las matrices en lenguaje C.
a. Matriz entrelazada (casi requiere interés para comprenderla)
2. Valores y Referencias
Los tipos de referencia incluyen: cadena, matriz, clase
Tipo de valor: además de los tipos de referencia, como char, int, short, bool y estructura, etc.
1. Cadena de tipo de referencia especial
Cada asignación y empalme reasignará espacio en el montón.
3. Función
Básicamente similar al lenguaje C.
1. Funciones con parámetros y múltiples valores de retorno.
static int[] Calc(int a,int b)
{
int sum = a + b;
int avg = sum / 2;
int[] arr = {sum, avg};
return arr;
//return new int[] {sum, avg}; //也可直接在return中新建数组返回
}
4. árbitro y fuera
1.ref es un modificador de parámetros de función
static void ChangeValue(ref int value)
{
value = 3;
}
//调用函数时
int a = 2;
ChangeValue(ref a);
2.out también es un modificador de parámetros de función
Utilice exactamente lo mismo que ref.
// 如果不加out或ref 函数内的赋值便无法影响到外部
static void ChangeValue(out int[] arr)
{
arr = new int[] {1,2,3};
}
int[] arr1 = {10,20,30};
ChangeValue(out arr1);
Pero también existen diferencias entre ref y out, que son:
- La variable pasada por ref debe inicializarse y out no la utiliza.
- La variable pasada de entrada a salida debe asignarse internamente, no se utiliza ref
int a;
ChangeValueRef(ref a);//会报错!必须初始化
ChangeValueOut(out a);//不会报错
5. Parámetros de longitud variable y valores predeterminados de los parámetros
1.Palabra clave de parámetro de longitud variable
params int[] significa que se pueden pasar n parámetros int. n puede ser igual a 0. Los parámetros pasados se almacenarán en la matriz arr.
Aviso:
- La palabra clave params debe ir seguida de una matriz.
- El tipo de matriz puede ser cualquier tipo.
- Los parámetros de función pueden tener otros parámetros y parámetros modificados por params
- Como máximo puede aparecer un parámetro en un parámetro de función y debe ser el último parámetro.
//求n个整数和的函数
static int Sum(params int[] arr)
{
//利用for循环求数组内的数字和即可
}
//调用时
Sum(1,2,3,4,5,6);//可以传任意多个参数
2. Valores predeterminados de los parámetros
Los parámetros con valores predeterminados de parámetros generalmente se denominan parámetros opcionales.
Al llamar a una función, no se pueden pasar parámetros. De lo contrario, se utilizará el valor predeterminado.
Si desea mezclarlos, los parámetros opcionales deben escribirse después de los parámetros ordinarios.
static void Speak(string str = "还没有话语")
{
console.WriteLine(str);
}
//调用时可以不传入参数
Speak();
6. Sobrecarga de funciones
Requerir:
- El mismo bloque de declaración (clase o estructura)
- Los nombres de las funciones son los mismos.
- El número de parámetros es diferente.
- Mismo número de parámetros pero diferentes tipos u orden
static int CalSum(int a,int b)
{
}
//这两个函数也不不能同时出现,即使其中一个用的是可选参数
static int CalSum(int a , int b = 1)
{
}
7. Estructura
Las estructuras generalmente se escriben en bloques de declaraciones de espacio de nombres.
La palabra clave es estructura.
struct 自定义结构体名
{
//变量
//构造函数(可选)
//函数
}
Escribe un ejemplo de estructura estudiantil.
struct Student
{
string name;
int age;
bool sex;
int id;
// 注意结构体中的方法 目前不需要加static
void Speak()
{
//可以使用前面声明的变量
}
}
1. Modificadores de acceso
¿Se pueden utilizar externamente las variables y métodos de la estructura modificada?
público significa público y privado significa privado (el valor predeterminado es privado)
2. Constructor de estructuras
- sin valor de retorno
- El nombre de la función es el mismo que el nombre de la estructura.
- Debe haber parámetros
- Después de declarar un constructor, todos los datos variables deben inicializarse en él.
//student结构体内要写的构造函数
public student(int age, bool sex, int number, string name)
{
this.age=age;
this.sex=sex;
this.number=number;
this.name=name;
}