[C#]基本程序结构Ⅱ添加类
添加类(CTRL+SHIFT+A)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp1 { internal class Class1 { } }
添加类中成员
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp1 { class Class1 { //数据成员 private int intData0; private int intData1; private int intData2; //构造函数-无参 public Class1() { Console.WriteLine("无参构造函数"); } //构造函数-有参 public Class1(int DATA0, int DATA1, int DATA2) { this.intData0 = DATA0; this.intData1 = DATA1; this.intData2 = DATA2; Console.WriteLine("有参构造函数"); } //属性 public int IntData0 { get { return intData0; } set { intData0 = value; } } public int IntData1 { get { return intData1; } set { intData1 = value; } } public int IntData2 { get { return intData2; } set { intData2 = value; } } //方法-打印数成员据的值 public void Show() { Console.WriteLine(intData0); Console.WriteLine(intData1); Console.WriteLine(intData2); } //方法-按照规则设置数据成员的值 public void SetData0(int TAMP) { if (TAMP < 0) { return; } intData0 = TAMP; } public void SetData1(int TEMP) { if (TEMP < 0) return; intData1 = TEMP; } public void SetData2(int TEMP) { if (TEMP < 0) return; intData2 = TEMP; } //方法-获得数据成员的值 public float GetData0() { return intData0; } //方法-对数据成员进行逻辑运算 public double Add() { return (intData0 + intData1 + intData2); } } }
主程序
using ConsoleApp1; namespace DEMO { class Program { static void Main(string[] args) { Class1 V0 = new Class1(); Class1 V1 = new Class1(); V0.Show(); V0.SetData0(1); V0.SetData1(2); V0.SetData2(3); V0.Show(); V0.IntData0 = 4; V0.IntData1 = 5; V0.IntData2 = 6; V0.Show(); Class1 V2 = new Class1(7, 8, 9); V2.Show(); Console.WriteLine(V2.Add()); } } }
一般的
①构造函数
若不写构造函数,则编译器为我们提供默认的构造函数,默认构造函数将值类型初始化为0,将引用类型初始化为NULL
若写了构造函数,则编译器根据我们写的规则初始化相应类型
可以写多个构造函数,每个构造函数的参数不同,编译器初始化时会自动选择用户有输入参数相匹配的构造函数进行初始化
可以在主程序中多次实例化(实例名称不可相同)类,此时相应构造函数将被多次调用
②属性
可以在属性中设置规则、修改属性的访问权限,也可以只有一个属性(只有一个get或者set)
namespace ConsoleApp1 { class Class1 { private int intData0; private int intData1; private int intData2; public int IntData0 { private get { return intData0; } set { if (value < 0) return; intData0 = value; } } public int IntData1 { get; set; } public int IntData2 { get; set; } } }
若属性只实现简单读取值和写入值,则该属性可以简写为如下,编译器自动寻找属性名称首字小写的数据成员并操作
namespace ConsoleApp1 { class Class1 { private int intData0; private int intData1; private int intData2; public int IntData0 { get; set; } public int IntData1 { get; set; } public int IntData2 { get; set; } } }
属性只实现简单读取值和写入值的情况下,数据成员的声明也可以省略,编译器自动创建相应的数据成员
namespace ConsoleApp1 { class Class1 { //private int intData0; //private int intData1; //private int intData2; public int IntData0 { get; set; } public int IntData1 { get; set; } public int IntData2 { get; set; } } }
using ConsoleApp1; namespace DEMO { class Program { static void Main(string[] args) { Class1 V0 = new Class1(); V0.IntData0 = 1; V0.IntData1 = 2; V0.IntData2 = 3; Console.WriteLine(V0.IntData0); Console.WriteLine(V0.IntData1); Console.WriteLine(V0.IntData2); } } }
属性也可以设置访问权限
public int IntData0 { get; private set; }
③访问权限(不写默认private)
对于数据成员
namespace ConsoleApp1 { class Class1 { private int intData0; public int intData1; } }
using ConsoleApp1; namespace DEMO { class Program { static void Main(string[] args) { Class1 V0 = new Class1(); V0.intData0 = 1; //CS0122 V0.intData1 = 1; } } }
对于属性
namespace ConsoleApp1 { class Class1 { public int IntData0 { get; private set; } public int IntData1 { private get; set; } public int IntData2 { get; set; } } }
using ConsoleApp1; namespace DEMO { class Program { static void Main(string[] args) { Class1 V0 = new Class1(); V0.IntData0 = 1;// CS0272 V0.IntData1 = 2; V0.IntData2 = 3; Console.WriteLine(V0.IntData0); Console.WriteLine(V0.IntData1);// CS0272 Console.WriteLine(V0.IntData2); } } }
对于方法
namespace ConsoleApp1 { class Class1 { //数据成员 private int intData0; private int intData1; private int intData2; //方法-按照规则设置数据成员的值 public void SetData0(int TAMP) { intData0 = TAMP; } //IDE0051 private void SetData1(int TEMP) { intData1 = TEMP; } public void SetData2(int TEMP) { intData2 = TEMP; } //方法-打印数成员据的值 public void Show() { Console.WriteLine(intData0); Console.WriteLine(intData1); Console.WriteLine(intData2); } } }
using ConsoleApp1; namespace DEMO { class Program { static void Main(string[] args) { Class1 V0 = new Class1(); V0.SetData0(1); V0.SetData1(2);//CS0122 V0.SetData2(3); V0.Show(); } } }
综上,对于方法、字段、属性和事件设置private即让它们不能被读取或写入(引用)