A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ljh4282158 中级黑马   /  2013-6-11 21:18  /  1507 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一、定义类、实例化对象、赋值、取值
***定义类
语法:
class 类名
{
   //类里面可以定义字段/成员,可以定义方法
   public string name;
   void Study()
   {
      Console.WriteLine("......")
   }
   //成员的数据可以是任意自定义类型
}

***实例化对象
语法:
类名 对象名 = new 类名();
例:Car car = new Car();//通过new来实例化

***给对象的字段赋值
语法:
对象名.字段名=...
例:car.brand = "BMW";

***取值
语法:
对象名.字段名
例1:string brand=car.brand;//取值出来并赋给一个变量
例2: Console.WriteLine("品牌:{0},颜色:{1},价格:{2}", car.brand, car.color, car.price);
--------------------------------------------------
二、访问修饰符
1.public:公有的,完全公开,在任何地方都可以访问
2.private:私有的,只能在类里面可以访问;
不写,默认就是private
3.protected:保护类型,只能在该类里面和它的子类(继承类)中访问
4.internal:只能在包含它的程序集中访问
5.protected internal:只能在包含它的程序集和它的子类中可以访问

***自定义类型的访问修饰符有俩种:public和internal。 不写,默认就是internal
--------------------------------------------------
三、方法的定义、使用
***方法的定义
语法:
[访问修饰符] 返回值类型 方法名(参数列表)
{
    方法语句块的代码
}

***this关键词
当变量名冲突时,通过this.成员名把它们区分开。this就代表当前这个对象,也就说:哪个对象使用这个方法,this就是谁
例:
public void SetHeight(double height)
{            
   this.height = height;
}

***void、return
无返回值的方法,返回值类型用void表示。
有返回值的方法,在语句块中用return来返回值。

***方法的调用
调用无返回值的方法,直接对象名打点使用
例:stu1.Study(DateTime.Now);
调用有返回值的方法,还要定义对应类型的变量来接收方法的返回值
例:string msg = stu1.Eat(DateTime.Now);
---------------------------------------------------
四、构造函数、构造函数的重载
***构造函数
构造函数是一种的特殊的方法,用于数据类型的实例化new,当创建类或结构的对象时会自动调用构造函数。
类都有一个默认的构造函数public MyMath(){},默认的构造函数自动生成,是看不到的。当我们自己手动的写了构造函数之后默认的构造函数就会消失。
例:
//构造函数没有返回值
public MyMath()//构造函数的名称和类的名称相同
{ }

***构造函数的重载
重载:方法名相同,参数个数或参数的数据类型不同
例:        
//自己定义一个构造函数
public MyMath(int a)
{
   this.a = a;
   b = 10;
}
---------------------------------------------------
五、params关键词、方法的参数和返回值的类型
***params关键词
params关键词声明,可以采用长度变化的参数。
params int[]能自动把传进来的值转换成一个数组。
例:public int Sum2(params int[] array)
{......}

***方法的参数和返回值的类型可以是任意类型
例:public List<int> List(int a, int b, int c)
{......}
---------------------------------------------------
六、值传递、引用传递(ref、out)
***值传递
传递参数的默认机制:值传递。
变量的值传到方法里面时,是复制了一个副本,在方法内部实际上是对副本进行的一个操作,所以对方法外部变量的值没有任何影响。
例:
public void Fun(int i)
{
   i += 100;
}
int i = 10;
math3.Fun(i);
Console.WriteLine("值传递变量i本身的值不变,依然是{0}", i);//10

***引用传递
引用传递传的是变量的内存地址。
变量在方法内的改变会影响方法外的值。
例1:
public void Fun(ref int i)
{
   i += 100;
}
math3.Fun(ref i);//ref引用传递,传参时要写上ref关键词
//ref声明的参数,传值之前必须赋初值
Console.WriteLine("ref声明引用传递,变量i本身的值变化为{0}", i);

例2:
public int Fun2(int a, int b, out int min)
{
   min = a < b ? a : b;
   return a + b;
}
int min;
//out输出参数,只输出不输入(不用传初值),传值时也要写上out关键词,也是引用传递
result = math3.Fun2(10, 20, out min);
Console.WriteLine("俩个数的较小值为:{0}",min);


一、属性
***属性语法
例:
string no;//字段成员的作用就是用来保存数据的
public string No//属性名首字母要大写
{
//get和set可以理解成方法,它们会在利用属性赋值和取值时自动调用
get { return no; }//数据存放在字段中,所以要return字段
set { no = value; }//value表示做赋值操作时传进来的值        
}
***通过属性进行赋值和取值时,可以做些逻辑操作
例:
string address;
        //取值时,如果地址长度大于10个字符,那么先截取前10个字符,拼接“...”,再取值
public string Address
        {
            get
            {
                if (address.Length > 10)
                {
                 address=address.Substring(0, 10) + "...";

                }
                return address;
            }
            set { address = value; }
        }
***属性的简写方式
例:
string tel;

        public string Tel
        {
            //采用简写方式必须要通过属性来赋值
            get ;//取值赋值的简写方式
            set ;
        }
***只读属性
string remark="五好学生";
        //只读属性
        public string Remark
        {
            get { return remark; }

        }
--------------------------------------------------------------------

二、索引器
***定义索引器语法:
访问修饰符 返回类型 this[参数列表]
{
        ...
}
例:
public AddressBook this[int index]
{
        ...
}
***索引器可以重载
public AddressBook this[string no]
        {
            get
            {
                //遍历所有元素,找匹配项
                foreach (AddressBook item in list)
                {
                    if (item.No == no)
                    {
                        //编号相等,说明是匹配项
                        return item;
                    }

                }
                return null;//没有匹配项,返回空
            }

        }
***索引器可以根据多个条件进行查询
  public AddressBook this[string name, string sex]
        {
            get
            {
                foreach (AddressBook item in list)
                {
                    if (item.Name == name && item.Sex == sex)
                    {
                        return item;
                    }

                }
                        return null;
            }
        }


-----------------------------------------------------------------------
三、递归算法
***递归的思想:自身调用自身!
***注意:不能无限制的调用,不然会成为死循环,递归算法要有出口(停止调用自身的时候)!
例1:
//计算5+4+3+2+1的值
n+(n-1)+(n-2)+...+2+1
public int Sum(int n)
        {
            //递归算法要有一个出口(停止调用自身的时候)
            if (n == 1)
            {
                return 1;
            }
            return n + Sum(n - 1);
        }

            MyMath mm = new MyMath();
            Console.WriteLine(mm.Sum(8));
例2:
  //古典问题:有一对兔子,从出生开始到第三个月可以生一对兔子,新出生小兔子到第三个月也可以生兔子。具有生育能力后,每月都能生一对
            //问:到第N个月有多少对兔子?
public int tuzi(int n)
        {
            if (n <=2 )
            {
                return 1;
            }
            return tuzi(n - 2) +tuzi(n - 1);
        }
Console.WriteLine(mm.tuzi(6))

例3:
public string Pa(string n)
        {
            if(!n.Contains("  "))
            {
                return n;
                }
            return Pa(n.Replace("  ", " "));
        }
        string str = "q   w             e       r";
        Console.WriteLine(mm.Pa(str));




2 个回复

倒序浏览
值得学习ing!
回复 使用道具 举报
{:soso_e127:}太长了。
一点小心得:一:
面向对象的特性:封装,继承,多态

二:
什么是类?什么是对?类和对象的区别?日和写一个汽车类?
类是模具,创建对象的模具,抽象的。
类组成:字段,属性,方法,构造函数等。
对象是具体的,是类的具体实例,对象具有属性(特征)和方法(行为)。


回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马