Tempo de estudo: 17 de setembro de 2020
- Muitas informações sobre os tipos de dados podem ser visualizadas online
- público: compartilhado, todas as classes podem acessar
- privado: a classe atual privada pode ser acessada
- protegido: a classe protegida atual e as subclasses que a herdam podem acessar
- interno: o interno é limitado ao acesso dentro deste projeto, outros não podem ser acessados
- protegido interno: o acesso protegido interno só pode ser acessado dentro do projeto ou as subclasses não podem ser acessadas por outras classes
- Restrições de nível de acesso
- Os modificadores de acesso da classe pai e da subclasse devem ser consistentes
- O modificador de acesso do método deve ser consistente com o modificador de acesso do parâmetro do método
- Observação: o nível de acesso da classe é implicitamente privado por padrão, e público deve ser adicionado para permitir acesso externo
Teclas de atalho :
- Comentário: Ctrl + K + C
- Remova o comentário: Ctrl + K + U
- Organize o código: Ctrl + K + D / F
- Dica de código: Ctrl + J
- Prompt de parâmetro do método: Ctrl + shift + espaço
- Inserir bloco de código: Tab (pressione duas vezes) [Por exemplo: entrar e sair e pressionar duas vezes Tab para que o bloco de código de loop seja gerado]
- Exclua a linha atual: Ctrl + shift + L
- Ctrl + M + M: oculta ou expande o estado de dobra aninhado atual (M é duas vezes)
- Retângulo da linha de foco: Alt + botão esquerdo do mouse
- Sobre classes, atributos, métodos
- Você pode visualizar a classe ClassYin01, que possui propriedades e métodos registrados
class ClassYin01
{
/* 属性遵循大驼峰命名法
* 如果属性中具有 get 关键字,说明可以获取该属性的值
* 如果属性中具有 set 关键字,说明可以向该属性设置值
*
* 类使用关键字 new 实例化对象
* 一个类可以实例化多个对象
* 对象可以使用类定义的属性和方法
*
* 静态的属性和方法通过 static 关键字修饰
* 静态的属性可以通过类型直接获取,非静态则必须通过实例化的对象获取
*
* 静态方法中只能使用静态字段
*
* 调用静态属性和方法,需要使用类来点属性或方法【ClassYin01.IdCard】
*
* 静态类通过 static 关键字修饰
* 一般情况下类型不需要静态修饰,只有当类型中存在扩展方法时需要使用静态类
*/
// 下面三个属性:Name、Age、Height
public string Name {
get; set; }
public int Age {
get; set; }
public int Height {
get; set; }
// 下面一个静态属性:IdCard
public static string IdCard {
get; set;}
// 下面两个方法:Eat、Run
/// <summary>
/// 人在吃的方法
/// </summary>
public void Eat()
{
MessageBox.Show(Name + "在吃");
}
/// <summary>
/// 人在跑的方法
/// </summary>
public void Run()
{
MessageBox.Show(Name + "在跑");
}
// 下面静态方法:RedID
/// <summary>
/// 静态方法读取身份证号
/// </summary>
public static void RedID()
{
MessageBox.Show("身份证号为:" + IdCard);
}
}
- ClassYin01 classe de atribuição de propriedade e chamar seus métodos :
// 类的实例化
ClassYin01 XiaoYin01 = new ClassYin01();
XiaoYin01.Name = "小印01";
XiaoYin01.Age = 22;
XiaoYin01.Height = 173;
ClassYin01.IdCard = "421083199800000000";
XiaoYin01.Eat();
XiaoYin01.Run();
ClassYin01.RedID();
ClassYin01 XiaoYin02 = new ClassYin01()
{
Name = "小印02",
Age = 23,
Height = 175
};
ClassYin01.IdCard = "421083199800000000";
XiaoYin02.Eat();
XiaoYin02.Run();
ClassYin01.RedID();
// Tipo inteiro (int) para tipo de string (String)
int i = 0;
String st = i.ToString ();
// Prompt pop-up [semelhante a ShowMessage () em Delphi]
MessageBox.Show (st);
// Mostrar formulário
Form1 Form1 yf1 = new Form1 ();
yf1.ShowDialog ();
- A diferença entre switch e if [por exemplo, i é uma pessoa que precisa encontrar uma sala privada, e a condição a ser atendida é a sala privada correspondente]
- Se é equivalente a ir ao restaurante e perguntar ao garçom, se há uma sala privada para XX, então entre para jantar se não houver mais
- Trocar equivale a ir jantar em um restaurante, o garçom, você marcou hora em um quarto particular, ou não, apenas no lobby (padrão)
declaração switch :
switch (i)
{
case 1:
MessageBox.Show("这是1号房!");
break;
case 2:
MessageBox.Show("这是2号房!");
break;
case 3:
MessageBox.Show("这是3号房!");
break;
default:
MessageBox.Show("没有包房了,只能在大厅吃饭");
break;
}
Array :
// 声明没有元素的数组【5是数组长度,声明长度后不可改变】
int[] ints1 = new int[5];
// 声明初始化有元素的数组
int[] ints2 = new int[] {
1, 2, 3, 4 };
// 在声明初始化有元素的数组时,也可以指定数组大小
string[] strs1 = new string[5] {
"ab", "bc", "c", "cd", "de" };
// 使用 for 循环给没有元素的数组赋值
for (int ii = 0; ii < ints1.Length; ii++)
{
ints1[ii] = ii;
}
/* (int)5.21 表示使用显示强制转换 C# 整形是 int32,因此使用此方法转成 int32位,不遵循四舍五入,只截取整数部分
* int.Parse(""); 只支持将 string 类型转成 int,Parse 就是把 String 类型转换成 int,char,double...等,
* 也就是 类型.Parse(string) 括号里面一定是string类型的
*
* Convert.ToInt32(4.5); 不完全遵循四舍五入,如果括号里面的需要四舍五入的数字是中间数(5),那么就返回二者中间的偶数
*/
Convert.ToInt32(4.5);// 输出为4
Convert.ToInt32(4.6);// 输出为5
Convert.ToInt32(5.4);// 输出为5
Convert.ToInt32(5.5);// 输出为6
Método : [chame diretamente o método escrito no Formulário]
// 调用下面的 NumAdd 方法
MessageBox.Show(NumAdd(10, 5));
/* 调用下面带 out 的方法
* 其中传递的是参数的地址,当方法中修改后,传进去的原参数因为和里面已经修改的参数地址相同,所以原参数也会同时跟着修改
* 如果被调用的方法没有给输出参数赋值,就会出现变异错误。
* out 可以调用一次方法获得多个返回值【C#7.0 要实现调用一次方法返回多个参数,建议使用元组】
* out 传进去的值,在方法里面的【必须】给传进去的重新赋值
*/
string stxt = "我是默认的赋值";// 提示不需要对 stxt 赋值
MessageBox.Show(Text1(out stxt));
// 所谓的返回多个参数就是利用 out 传进去的是参数地址,传进去进行修改地址里面的内容,进而实现多参数修改,这就是上面所说的返回多参数
MessageBox.Show(Text2(stxt, out string stxt2));// 输出:我是在里面被改变了
MessageBox.Show(stxt2);// 输出:我是在里面被改变了的stxt2
/* 调用下面带 ref 的方法
* 其跟 out 一样都是引用传递,但是 ref 传进去的的参数必须先赋值,在方法里面可以给传进去的参数赋值,也可以不给它赋值
*/
string stxt3 = "ref 传过去的参数必须先赋值";
MessageBox.Show(Text3(stxt, ref stxt3));// 输出:我是在里面被改变了
- Método escrito no formulário
/* 这些三条斜杠的是为函数写注释 */
/// <summary>
/// 两个数加法加法方法
/// </summary>
/// <param name="snum1">数字1</param>
/// <param name="snum2">数字2</param>
/// <returns>返回两个数的和</returns>
public string NumAdd(int snum1, int snum2)
{
int ssum;
ssum = snum1 + snum2;
return "和为:" + ssum;
}
/// <summary>
/// out单个返回值【传进来的是参数地址进行修改里面的内容】
/// </summary>
/// <param name="stxt">传进来的参数</param>
/// <returns>返回的是方法里面的stxt</returns>
public string Text1(out string stxt)
{
stxt = "我是在里面被改变了";
return stxt;
}
/// <summary>
/// 所谓的多参数返回 就是传进来多个参数地址,最终返回其中一个,但是传进来的参数地址里面的内容都被修改了,所以在调用的时候直接可以得到被修改后的的参数
/// </summary>
/// <param name="stxt">传进来的stxt参数,返回的也是这个参数的修改值</param>
/// <param name="stxt2">传进来stxt2参数地址</param>
/// <returns>返回的是方法里面的stxt,但是传进来的stxt2地址里面的内容也被修改了</returns>
public string Text2(string stxt, out string stxt2)
{
stxt = "我是在里面被改变了";
stxt2 = "我是在里面被改变了的stxt2";
return stxt;
}
/// <summary>
/// 带有 ref 的方法,在方法里面不修改参数的情况
/// </summary>
/// <param name="stxt">传进来的stxt参数</param>
/// <param name="stxt3">传进来的stxt3参数地址</param>
/// <returns>返回的是方法里面的stxt</returns>
public string Text3(string stxt, ref string stxt3)
{
stxt = "我是在里面被改变了";
return stxt;
}
Faça algumas anotações para lê-las mais tarde.