类和方法

复制代码
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();
        }

        
    }
}
复制代码

 

posted @   困到很想醒  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示