• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

w

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

2010第一篇学习笔记,深入.net平台关于基础的部分知识

以下代码涉及类的封装,属性和方法的使用和区别,值类型和引用类型的区别和使用,枚举,常量,构造有参函数等,添加和使用ArrayList,使用循环阅历ArrayList元素等。

 

  public class Student

    {

 

        public int age;

        private string name;//字段,也叫属性

 

        public string idNumber;

 

 

        public void SayHi()//类的成员,介绍自己的方法

        {

            string message;

            message = string.Format("大家好,我是{0}同学。", name);

 

 

 

        }

 

    }

 

    class Program

    {

        static void Main(string[] arge)

        {

            Student mystudent = new Student();

            mystudent.age = 16;

            mystudent.idNumber = "123";

            mystudent.name = "wu";

           

        }

}

 

 

编译无法通过,因为private是受保护的级别,除非改为public。但对程序的保护不够。应该按照如下例子编写代码。

 

public class Student

    {

 

        private int age;

 

        public int Age

        {

            get { return age; }

            set

            {

                if (value < 0 && value > 100)

                {

                    value = age;

                }

                else

                {

                    age = 18;

                }

            }

        }

        //private string name;//字段,也叫属性

 

        //public string Name

        //{

        //    get { return name; }

        //    set { name = value; }

        //}

 

        //private string idNumber;

 

        //public string IdNumber

        //{

        //    get { return idNumber; }

        //    set { idNumber = value; }

        //}

 

 

        //public void SayHi()//类的成员,介绍自己的方法

        //{

        //    string message;

        //    message = string.Format("大家好,我是{0}同学。", name);

 

        //}

 

    }

 

    class Program

    {

        static void Main(string[] arge)

        {

            Student mystudent = new Student();

            mystudent.Age = -20;

            Console.WriteLine("年龄为:{0}",mystudent.Age.ToString());

            mystudent.Age = 40;

            Console.WriteLine("年龄为:{0}", mystudent.Age.ToString());

 

           

        }

    }

 

 

封装:封装字段是C#中面向对象的重要内容。是面向对象的三大特性之一。它用于内部实现,而对外只暴露其基本操作。而不会影响其他类的内部实现,类的封装为我们带来的好处是避免非法数据赋值,保证数据的完整性和避免类内部数据修改而影响了我们整个程序。

 

 

关于ref及ouT参数的传递

 

ref参数侧重于修改,out参数侧重于输出,而且out参数是必须赋值才能正常运行。

 

以下为一个简单的加法运算。类add为编写数据相加类。

    class Program

    {

        static void Main(string[] arge)

        {

           

            add a = new add();

            int pp1, pp2;//设定两个要传入的参数

            Console.WriteLine("请输入两个数字:");

            pp1 = int.Parse(Console.ReadLine());

            pp2 = int.Parse(Console.ReadLine());

            int sum = a.sum(pp1,pp2);

            Console.WriteLine("结果是{0}",sum.ToString());

           

        }

    }

class add   //这是一个加法的方法,参数p1和p2定义了两个数据相加的方法

{

    public int  sum(int p1,int p2)

{

    return p1 + p2;

   

}

 

 

现在有一个新问题,如果我们要的或许不止是单纯两个整形类型的数据相加,我们还需要两个double 或string类型的数据相加,那怎么办?是不是需要重新编写另外几个类似add类呢?我们调动的时候,还需要判断是哪种类型的数据相加,然后根据数据类型调用方法,很麻烦。所以,我们用到了重载。

 

重载粗略带过:例如在add中加入另外几个方法,类似:

public int sum(int p1,int p2)

{

Return p1+p2;

}

 

public int sum(string p1,string p2)

{

Return p1+p2;

}

 

注意:重载的方法名字必须相同,参数名称也需要相同

 

利用构造函数去创建对象

 

在创建类的时候,有一个特殊的方法是隐藏,即使不写,也存在。它就是最前面的构造函数。默认是为无参数的构造函数。这就是我们可以直接在别的类实例化,调动本类一样。例如前面的add a =new add();  ,构造函数的方法是程序执行中最先访问的方法。

 

public Student(int age, string name)

        {

            this.Age = age;

            this.Name = name;

        }

 

 

 

常量:如果一个程序中有某个值设定后就不能再修改,可采用常量在前面申明,这样有助于程序的维护,例如性别,汇率等……

关键字为:const

常出现的错误:给常量赋值会出现错误,常量无法赋值。

 

假设为stunent类增加性别字段,将其封装起来。

        const string gerder_m = "男";

        const string gerder_f = "女";

        private string gerder;

 

        public string Gerder

        {

            get { return gerder; }

            set { gerder = value; }

        }

 

然后在另外的类中实例化后为gerder赋值:

例如:mystudent.gerder = "accp";

 

编译器不会报错,因为常量属性本身就为string 类型。所以符合编译器规范。因此,我们无法有效准确的规范常量的范围。所以,我们需要用到下面提到的枚举。

 

枚举:可以为需要赋值的常量限定范围

关键字: enum

 

例如:public enum Genders //定义一个枚举

        {

            m,f

        }

        private Genders gerder;

 

        public Genders Gerder

        {

            get { return gerder; }

            set { gerder = value; }

        }

 

 

//mystudent.Gerder = "accp"; //无法通过编译,因为我已经用枚举限定了它的赋值范围。它只能为m和f赋值。

          mystudent.Gerder = Genders.m;

 

 

为枚举成员赋值:

mystudent.Gerder = Genders.m;

                int gerNum = (int)mystudent.Gerder;

                switch (gerNum)

                {

                    case 0:

                        Console.WriteLine("您输入的性别为男");

                        break;

                    case 1 :

                        Console.WriteLine("您输入的性别为女");

                        break;

                           

                }

 

 

总结枚举的好处:便于代码的维护,有助于给变量赋值的合法性。还有就是便于输入,我们每次只需要输入枚举名就能显示所有的值,提高开发效率。

 

结构:

    struct stu //定义一个结构,注意:定义结构时无法赋值

    {

        public string name;

        public int age;

 

}

 

总结结构的好处:适用于逻辑性不强的小程序,如果涉及复杂的计算,就最好使用类。

 

值类型和引用类型:

值类型本身就储存了变量本身的值,变量本身就包含了其实例化的数据,而引用类型保存的不是其实例化数据,而只是其内存引用而已。一个值类型的数据永远不会影响其他值类型数据的变量,而两个引用类型可能指向同一地址。从而使其他数据变量发生改变。

值类型的处理效率高于引用类型。在处理小对象和小数据的时候,可以使用值类型。

 

 

1 class和struct的语法基本相同,从声明到使用,都很相似。但是struct的约束要比class多,理论上,struct能做到的class都能做到,但class能做到的stuct却不一定做的到,也就是说struct都能被class所代替。

2 数据类型不一样,struct是值类型,class是引用类型,因此它们具有所有值类型和引用类型之间的差异。由于堆栈的执行效率要比堆的执行效率高,但是堆栈资源却很有限,不适合处理逻辑复杂的大对象,因此struct常用来处理作为基类型对待的小对象,而class来处理某个商业逻辑。

3 从继承性来看,struct既不能继承也不能被继承,但是可以实现接口,而Class就可以完全扩展了。内部结构有区别,struct只能添加带参的构造函数,不能使用abstract和protected等修饰符,不能初始化实例字段。

 

 

stu stu1 = new stu();//用结构实现

                stu stu2 = new stu();

                stu1.age = 18;

                stu2 = stu1;

                stu2.age = 20;

             

 

                Console.WriteLine("stu={0},stu2={1}",stu1.age,stu2.age);

 

 

Student stu1=new Student ();     //  用类实现

                Student stu2=new Student ();

                stu1.Age=18;

                stu2=stu1;

                stu2.age=20;

                Console.WriteLine("stu={0},stu2={1}",stu1.age,stu2.age);

 

 

 

索引器

//暂时忽略

 

ArrayList对象集合

 

ArrayList students = new ArrayList();

            Student a = new Student(20,"wu");

            Student b = new Student(20, "wu");

            Student c = new Student(20, "wu");

            students.Add(a);

            students.Add(b);

            students.Add(c);

 

ArrayList类似数组,但和数组的不同在于很灵活,能指定容量,而数组时固定的。ArrayList可以随时扩展和收缩。

 

添加元素ArrayList:

ArrayList students = new ArrayList();

            Student a = new Student(20, "wu");

            Student b = new Student(20, "wu");

            Student c = new Student(20, "wu");

            students.Add(a);

            students.Add(b);

            students.Add(c);

            Console.WriteLine("共包含{0}个学员",students.Count.ToString());

 

访问元素:

 

、    Student stu=(Student)students[0];

   stu.SayHi();

 

使用循环阅历ArrayList全部元素,foreach是通过对象去访问元素。

 

            foreach (object o in students)

              {

                Student s = (Student)o;

                Console.WriteLine(s.Name);

            }

 

删除ArrayList元素为有三个方法

1,   指定元素删除

2,  指定索引删除

3,  全部删除 student.clear();

 

 

posted on 2010-01-06 15:32  wwweee  阅读(236)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3