类和方法
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace x类和方法_19_4_9 { public class stu { //字段--值--与普通的变量类型--但要有权限 //为了数据的安全,一个班所有字段都是私有的 private string num;//学号 private string name;//姓名 private double sql;//成绩 private double oracle; private double sum;//总分 private double avg;//平均分 //静态的成员变量--字段 //静态的成员变量属于类公有的属性,而不是属于对象的 //定义静态的成员变量一般要给初始值 //班费 public static double mon = 2000; //静态的成员方法属于类不属于对象,只能访问静态成员变量 //交班费 public static void addmon(double n) { //mon=mon+n; mon+=n; } //求总分的方法 //方法也可以是私有的 private void calc() { sum = sql+oracle; avg = sum / 2; } //行为--功能--方法 //输出 // //所有私有字段,在外部一般都是通过公有的方法来操作的 //行为--功能--方法 //所有的类方法没有static关键字 //类中的字段可以直接引用 public void print() { calc();//私有方法要在公有方法里面调用 Console.WriteLine("-------学生信息--------"); Console.WriteLine("学号:{0}",num); Console.WriteLine("姓名:{0}",name); Console.WriteLine("sql成绩:{0}",sql); Console.WriteLine("oracle成绩{0}",oracle); Console.WriteLine("成绩总和{0}", sum); Console.WriteLine("平均成绩{0}", avg); } //把赋值设计为方法 //技巧:1、有几个要赋值的字段,形参就要有几个,2,形参的类型与要赋值的字段类型相同 public void set(string num, string name, double sql, double oracle) { //在类的赋值方法中一般为可读性,形参的类型与要赋值的字段类型相同 //但是num=num,编译系统认为是把形参num赋值给了自身 //所以要引用类对象的字段,前面必须是用this.指针 this.num = num; this.name = name; this.sql = sql; this.oracle = oracle; } //构造方法是创建对象且分配资源的功能方法,new调用它 //所以有一个系统默认的构造方法;现在我们的创建对象的语句是()。所以系统的构造方法是无参的 //我们可以自定义构造方法,但是你一旦定义构造方法,系统就被覆盖了 //自定义的构造方法:1、构造方法名与类名相同 没有返回值 ,连void都没有 //2、我们一般要么不写构造方法,要么至少要写两个,一个是无参的(给默认值)一个是带参的 //所以构造方法是可以重载的 //无参数的构遭方法 public stu() { num = "x180803"; name = "令狐冲"; sql = 89.9; oracle = 98.8; } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace x类和方法_19_4_9 { class Program { //类是c#中允许用户自定义的一种结构 //类是一个独立的模块--最好把类单独一个文件 static void Main(string[] args) { //类是抽象的,概念的,在c# 中是一个结构,所以要用这个结构定义变量(对象) //利用类创建对象 类 对象名 = new 类(); stu a = new stu(); //对象具有类的所有字段,方法 a.set("x180802", "赵明",88.8,99.9); a.print(); //练习:定义第二个对象b stu b = new stu(); b.set("x180802", "赵敏", 88.8, 77.7); b.print(); stu c = new stu(); c.print(); //输出班费 Console.WriteLine("班费"+stu.mon); //调用方法交班费 stu.addmon(555.5); //交完班费再输出 Console.WriteLine("交完班费"+stu.mon); //停止看结果 Console.ReadLine(); } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace x类和方法_19_4_9 { class Program { //类是c#中允许用户自定义的一种结构 //类是一个独立的模块--最好把类单独一个文件 static void Main(string[] args) { //类是抽象的,概念的,在c# 中是一个结构,所以要用这个结构定义变量(对象) //利用类创建对象 类 对象名 = new 类(); stu a = new stu(); //对象具有类的所有字段,方法 a.set("x180802", "赵明",88.8,99.9); a.print(); //练习:定义第二个对象b stu b = new stu(); b.set("x180802", "赵敏", 88.8, 77.7); b.print(); stu c = new stu(); c.print(); //输出班费 Console.WriteLine("班费"+stu.mon); //调用方法交班费 stu.addmon(555.5); //交完班费再输出 Console.WriteLine("交完班费"+stu.mon); //停止看结果 Console.ReadLine(); } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace x类和方法_19_4_9 { public class stu { //字段--值--与普通的变量类型--但要有权限 //为了数据的安全,一个班所有字段都是私有的 private string num;//学号 private string name;//姓名 private double sql;//成绩 private double oracle; private double sum;//总分 private double avg;//平均分 //静态的成员变量--字段 //静态的成员变量属于类公有的属性,而不是属于对象的 //定义静态的成员变量一般要给初始值 //班费 public static double mon = 2000; //静态的成员方法属于类不属于对象,只能访问静态成员变量 //交班费 public static void addmon(double n) { //mon=mon+n; mon+=n; } //求总分的方法 //方法也可以是私有的 private void calc() { sum = sql+oracle; avg = sum / 2; } //行为--功能--方法 //输出 // //所有私有字段,在外部一般都是通过公有的方法来操作的 //行为--功能--方法 //所有的类方法没有static关键字 //类中的字段可以直接引用 public void print() { calc();//私有方法要在公有方法里面调用 Console.WriteLine("-------学生信息--------"); Console.WriteLine("学号:{0}",num); Console.WriteLine("姓名:{0}",name); Console.WriteLine("sql成绩:{0}",sql); Console.WriteLine("oracle成绩{0}",oracle); Console.WriteLine("成绩总和{0}", sum); Console.WriteLine("平均成绩{0}", avg); } //把赋值设计为方法 //技巧:1、有几个要赋值的字段,形参就要有几个,2,形参的类型与要赋值的字段类型相同 public void set(string num, string name, double sql, double oracle) { //在类的赋值方法中一般为可读性,形参的类型与要赋值的字段类型相同 //但是num=num,编译系统认为是把形参num赋值给了自身 //所以要引用类对象的字段,前面必须是用this.指针 this.num = num; this.name = name; this.sql = sql; this.oracle = oracle; } //构造方法是创建对象且分配资源的功能方法,new调用它 //所以有一个系统默认的构造方法;现在我们的创建对象的语句是()。所以系统的构造方法是无参的 //我们可以自定义构造方法,但是你一旦定义构造方法,系统就被覆盖了 //自定义的构造方法:1、构造方法名与类名相同 没有返回值 ,连void都没有 //2、我们一般要么不写构造方法,要么至少要写两个,一个是无参的(给默认值)一个是带参的 //所以构造方法是可以重载的 //无参数的构遭方法 public stu() { num = "x180803"; name = "令狐冲"; sql = 89.9; oracle = 98.8; } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace x属性设计_19_4_9 { //索引器例子 class stuTeam { //字段 private stu [] student; //创建有参数构造方法 public stuTeam(int i) { this.student = new stu[i]; } //创建索引器,按索引(下标)访问 public stu this[int index] { get { if (index < 0 || index >= student.Length) { Console.WriteLine("索引值超出范围!"); return null; //返回空值 } return student[index]; } set { this.student[index] = value; } } //索引器重载--按索姓名访问 public stu this[string Name] { get { foreach (stu s in student ) { if (s.Name == Name) return s; //有与对象姓名符合的学生,则返回该学生信息 } Console.WriteLine("没有符合条件的学生信息!"); return null; } } } //主方法 //索引器 //定义一个包含5个学生的集合 stuTeam st = new stuTeam(5); //赋值 stu s1 = new stu("X170401", "Rose", -20, 85); stu s2 = new stu("X170402", "Jack", 77, 120); stu s3 = new stu("X170403", "张三", 77, 66); stu s4 = new stu("X170404", "李四", 55, 83); stu s5 = new stu("X170405", "王五", 63, 81); st[0] = s1; st[1] = s2; st[2] = s3; st[3] = s4; st[4] = s5; //输出 Console.WriteLine("学号\t姓名\tSQL\tORACLE\t"); Console.WriteLine("---------------------------------"); for (int i = 0; i < 5; i++) { Console.WriteLine("{0}\t{1}\t{2}\t{3}\t", st[i].Num, st[i].Name, st[i].Sql, st[i].Oracle); } //搜索信息 //按索引值进行搜索 Console.WriteLine("请输入要查找的学生索引值"); int n = int.Parse(Console.ReadLine()); stu ss = st[n]; if(ss!=null ) { Console.WriteLine("{0}\t{1}\t{2}\t{3}\t", ss.Num, ss.Name, ss.Sql, ss.Oracle); } //按姓名查找 Console.WriteLine("请输入要查找的学生姓名"); string m = Console.ReadLine(); ss = st[m]; if(ss!=null ) { Console.WriteLine("{0}\t{1}\t{2}\t{3}\t", ss.Num, ss.Name, ss.Sql, ss.Oracle); } //程序等待 Console.ReadLine(); }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 结构体 { class Program { //结构体与类一样,是独立的模块,放在主方法的外部--上面 //(1)结构体的关键字是struct struct stu { //(2)由于结构体没有封装性,字段一般为公有的 //学号 public string num; //快捷键:prop+tab两次:快捷键生成属性 public string Num //公共的属性 { get//读取 { return num;//读取,利用return语句返回该字段的值 } set //写入 { num = value;//写入,value是一个关键字,表示一个值 } } //姓名 private string name; public string Name { get { return this.name;//读取,利用return语句返回该字段的值 } set { this.name = value;//写入,value是一个关键字,表示一个值 } } //属性的第一好处就是封装之后在外面能够对单个字段进行读写,第二个好处就是可以加约束 //两门课 private double sql; public double Sql { get { return sql;//读取,利用return语句返回该字段的值 } set { //约束一般是对set部分写入 if (value >= 0 && value <= 100) { sql = value; } else { sql = 0;//非法成绩-------不在范围内的成绩,给0 } } } private double oracle; public double Oracle { get { return oracle;//读取,利用return语句返回该字段的值 } set { //约束一般是对set部分写入 if (value >= 0 && value <= 100) { oracle = value; } else { oracle = 0;//非法成绩-------不在范围内的成绩,给0 } } } //总分 private double sum; //平均分 private double ave; //特定功能--方法 //输出 public void print() { Console.WriteLine("\n学号:{0}", num); Console.WriteLine("姓名:{0}", name); Console.WriteLine("SQL:{0}", sql); Console.WriteLine("ORACLE:{0}", oracle); Console.WriteLine("总分:{0}", sum); Console.WriteLine("平均分:{0}", ave); } //(3)结构体没有无参数构造方法 //(4)如写有参数构造方法,则需完全赋值 public stu(string num, string name, double sql, double oracle) { //num = num;系统认为是:形参num赋值给了形参num //希望形参和属性同名--this指针--指向类本身的 num = num; name = name; sql = sql; this.oracle = oracle; sum = sql + oracle; ave = sum / 2; } } static void Main(string[] args) { //定义结构体变量并操作 stu a = new stu("X170401", "Rose", 87, 85); a.print(); //程序等待 Console.ReadLine(); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构