【黑马程序员】C#面向对象基础

来源:互联网 发布:深圳赢时胜公司 知乎 编辑:程序博客网 时间:2024/05/16 14:36
------- WindowsPhone 7手机开发、.Net培训、期待与您交流! -------

 

1.类是抽象的概念,仅仅是个模板,是个模子,而对象是一个能够看得到,摸的着的具体事例,对象叫做类的事例,类不占内存,对象占内存,类中可以包含变量的定义和方法,确定的对象会有特定的属性和方法。下面举例说明类和对象:

namespace _01类¤¨¤

{

 

  class Program

    {

        static void Main(string[]args)

        {

                           Person  zsPseron=new Person();//new一个对象,将Person类实例化

                            zsPseron.name=”张三”;//给类的属性赋值,属性可以直接赋值

                           zsPerson.sex=’男’;

                            zsPerson.age=18;

                            zsPerson.SayHello();//通过对象调用类的方法,在调用方法时必须通过实例名.方法名()

                               //不要忘记()

 

        }

    }

 

    class Person

{

        ///<summary>

        ///定义类的属性和方法

        ///</summary>

        public string name;

        public char sex;

        public int age;

        public void SayHello()//定义Person类打招呼的方法

        {

            Console.WriteLine("我是{0},我是{1}¦,¨今年¨2}岁了",name ,sex ,age );

        }

    }

}

static和没有static区别:

只要是没有加 static的方法或属性,都必须先实例化,在通过实例名.方法名或实例名.属性来访问

static的方法或属性,可以直接通过,类名.方法名或类名.属性来

2.属性

没有属性时在访问类中的变量时,比方说 zsPerson.age=’’;,现实生活中是不存在的,所以需要规范相应变量的值,这时就需要用到属性,属性是为了保护与之对应的字段,保证对字段的读取和赋值符合要求,属性分只读只写和读写,当允许外部访问的变量时,一定要声明为属性,

属性的定义:

class Person

    {

       public string name;

       public char sex;

       private int age;

 

       //定义一个变量,在这个变量中含有get/set两个方法,我们就叫做属性

       public int Age

       {

                            //取值

           get

           {

                return age;

           }

           //规范用户赋的值

           set

           {

                //这里有个关键字value中就是存储用户赋的那个值

                if (value >=0)

                {

                    age = value;

                }

                else

                {

                    age = 0;

                }

           }

 

       }

}

3.构造方法

在前面创建一个实例对象时,就对该实例的属性进行赋值,如果创建N个实例呢,就无法一一对每个实例的属性赋值了,那样任务太繁重了,于是引入了构造方法,通过构造方法简化上面的过程,

使用构造方法的好处

1)  对多个属性进行赋值时不需要重复写实例名

2)  可以保证用户在new一个对象时必须对某一个属性进行赋值

3)  2类似,在创建对象时对只读属性进行初始化

我们可以定义一个构造方法,他是一个特殊的方法,他的名字和类的名字相同,没有返回值,连void都不需要写,都可以省略,我们一旦手写一个构造方法后,系统原先给我们加的迷人无参数构造函数就没有了

 

当我们定义好一个类之后如果没有构造方法,那么系统会自动给我们加上一个默认的无参数的构造方法,在这个方法中什么也不做我们也看不到

class Program

    {

        static void Main(string[] args)

        {

            Student zsStudet = newStudent("张三");//因为name是只读的,所以在创建对象时,通过调用构造方法初始化name,

            //zsStudet.Name = "张三";//因为name是只读的所以此时不能修改

            zsStudet.Sex = '';

            zsStudet.Age = 18;

            zsStudet.Chinese = 90;

            zsStudet.Math = 95;

            zsStudet.English = 80;

 

            Student xlStuent = newStudent("小兰");

            //xlStuent.Name = "小兰";

            xlStuent.Sex = '';

            xlStuent.Age = 18;

            xlStuent.Chinese = 95;

            xlStuent.Math = 85;

            xlStuent.English = 100;

 

            Console.WriteLine("下面是张三打招呼和显示成绩的方法");

            zsStudet.SayHello();

            zsStudet.ShowScroe();

 

            Console.WriteLine("下面是小兰打招呼和显示成绩的方法");

            xlStuent.SayHello();

            xlStuent.ShowScroe();

 

            Console.ReadKey();

        }

    }

构造方法的定义如下:

       

       class Student

    {

        public  Student(string name)//定义Student这个构造方法,在创建对象时必须对name这个只读属性赋值

        {

           this. name=name;//this.name表示当前name即下面的name,等号右边的name是传进来的name即上面括号中的name

        }

        string name;

 

        public string Name

        {

            get { return name; }

        

        }

 

      

        char sex;

 

        public char Sex

        {

            get { return sex; }

            set

            {

                if (value == '' || value=='')

                {

                    sex = value;

                }

                else

                {

                    sex = '';

                }

            }

        }

        int age;

 

        public int Age

        {

            get { return age; }

            set

            {

                age = value >= 0 ? value :0;

            }

        }

        int chinese;

 

        public int Chinese

        {

            get { return chinese; }

            set { chinese  = value >= 0 ? value : 0; }

        }

        int math;

 

        public int Math

        {

            get { return math; }

            set { math  = value >= 0 ? value : 0; }

        }

        int english;

 

        public int English

        {

            get { return english; }

            set { english  = value >= 0 ? value : 0; }

        }

        public void SayHello()

        {

            Console.WriteLine("我叫{0},我今年{1}岁,我是{2}同学",name,age, sex);

        }

        public void ShowScroe()

        {

            int sum = chinese + english + math;

            int avg = sum / 3;

 

            Console.WriteLine("我叫{0},我的总成绩{1},平均成绩{2}",name,sum ,avg);

        }

    }

构造方法可以重载,给相应的字段赋值就可以了

4.可选参数params的运用

可选参数只能有一个而且只能放在参数最后面

using System;

classApp
{
publicstaticvoid UseParams(paramsobject[] list)
{
for (int i = 0; i < list.Length; i++)
{
Console.WriteLine(list[i]);
}
}

staticvoid Main()
{
// 一般做法是先构造一个对象数组,然后将此数组作为方法的参数
object[] arr = newobject[3] { 100, 'a', "keywords" };
UseParams(arr);

// 而使用了params修饰方法参数后,我们可以直接使用一组对象作为参数
// 当然这组参数需要符合调用的方法对参数的要求既参数类型要一致
UseParams(100, 'a', "keywords");
Console.ReadKey();
}
}

5.命名空间

 

命名空间:用于解决类重名问题,可以看做l类的文件夹“。

不在同一个命名空间下的类,不能直接访问,要像访问别的命名空间下的类有两种方法

1)  通过 using引用对方的名空间

2)  命名空间.类名

 

Sytem根命名空间

 

6.String

String可以看做是char的只读数组

字符串是引用类型的,所以它具有不可变性,如果要对其中的字符进行修改,就必须创建一个新的字符串通过String.ToCharAraay()来接受修改后的字符串

String s=”helloword”;

Char[] cahrs=s. ToCharAraay();

Chars[1]=’I’;

s=newstring(chars);

一切类的实例都可以调用.ToString();方法转换成字符串类型

字符串的连接+,两边只要有一个是字符串类型,另一个也会被自动转换为字符串类型

 

String常用方法如下:

1)  ToLower():得到字符串的小写形式,字符串是不可变的,使用这些函数都不会直接改变字符串的内容而是把修改后的字符串通过函数的返回值的形式返回

2)  ToUpper();得到字符串的大写形式

3)  Trim();去掉字符串两端的空白

4)  S1.Equals(s2,StringComparsion.Ordinnallgnore Case):两个字符串进行不区分大小写的比较

字符串的分割:

1)  String Split(params char[] separator);将字符串按照指定的分隔符分割为字符串数组

2)  String Split(char separator,StringSplitOption options);将字符串按照指定的char分割符分割为字符串数组,当OptionsRemoveEmptyEntries的时候移除结果中的空白字符串

字符串替换:

StringReplace(string oldvalue,string newvalue);

取字符串:SubString(intstartIndex);取从StartIndex位置开始一直到最后的字符串

          SubString(int startIndex,int length);取从位置StartIndex位置开始长度为length的字符串,如果length不够则会报错

BoolContains(String value):判断字符串中是否含有子字符串value

BoolStartWith(String value);判断字符串是否是以子字符串value开始

BoolEndWith(String value);判断字符串是否是以子字符串value结束

IntIndexOf(Stringvalue);取子字符串value第一次出现的位置

IntIndexOf(Stringvalue,intStartIndex);取子字符串valueStartIndex位置开始第一次出现的位置

---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ---------------------- 详细请查看:http://edu.csdn.net/heima/
原创粉丝点击