首页 > 代码库 > 今天学习的构造函数与字符串的详解

今天学习的构造函数与字符串的详解

         今天学习的还好吧,但是感觉太陌生啦,或许没有接触的人都感觉这个太抽象,但是其实不是啦,要理解啦就可以把构造函数好好地使用啦,但是在写程序中出的问题还是难免的·

     1.构造方法

•方法名和类名一样,没有返回值,连void都不用。
•构造函数可以有参数,new对象的时候传递函数参数即可
•如果不指定构造函数,则类有一个默认的无参构造函数。如果指定了构造函数,则不再有默认的无参构造函数,如果需要无参构造函数,则需要自己来写。
•构造函数可以重载,也就是有多个参数不同的构造函数。

 举例:

•给前面写的学生类添加构造方法.使在实例化学生类的时候可以通过构造方法对姓名性别年龄语数英等属性赋值,也可以只对姓名和性别赋值.年龄默认为18岁,语数英成绩默认为0分.
–张三 男 18  三科成绩为:90 95 80
–小兰 女 16  三科成绩为:95 85 100
enum Gender {          男,          女    }    class Student    {        public Student()        {                   }        string name;        public string Name { set; get; }        int age=18;        //public int Age { set; get; }        Gender gender;        public Gender Gender { set; get; }        int chinese;        int math;        int english=0;        public Student( string n,int a,Gender g,int c,int m,int e)        {            name = n;            age = a;            gender = g;            chinese = c;            math = m;            english = e;        }        public void say()        {            Console.WriteLine("名字为{0},今年{1}岁了,{2},三科成绩为{3},{4},{5}", Name, age, Gender,chinese,math,english);        }} class Program    {         static void Main(string[] args)        {            Student stu = new Student("张三", 18, Gender.男, 90, 85, 80);            stu.say();            Console.ReadKey();         }     }

              这就是构造函数的方法,另外还有个就是给字段赋初值,下面这样也可以实现传参:

 

从结果看:   结果输出了年龄18岁,即为初值。

2.写一个Ticket类,有一个距离属性(本属性只读,在构造方法中赋值),不能为负数,有一个价格属性,价格属性只读,并且根据距离distance计算价格Price (1元/公里):

–0-100公里        票价不打折
–101-200公里    总额打9.5折
–201-300公里    总额打9折
–300公里以上    总额打8折

有一个方法,可以显示这张票的信息.90公里90块钱

   class ticket    {        public ticket(int d)        {            if (distance < 0)            {                distance = 0;            }            this.distance = d;        }        int distance;        public int Distance        {            get { return distance; }        }        double price = 500;        public double Price        {            get            {                if (distance > 0 && distance <= 100)                {                    return distance;                }                else if (distance > 100 && distance <= 200)                {                    return distance * 0.95;                }                else if (distance > 200 && distance <= 300)                {                    return distance * 0.90;                }                else                {                    return distance * 0.80;                }            }        }    }}class Program    {        static void Main(string[] args)        {            ticket a = new ticket(155);            Console.WriteLine(a.Price);            Console.ReadKey();        }    }

   这就是构造方法。

      2.字段与属性

   简单的说下,就是前面有-的都是字段,+的为属性和方法。

       3.命名空间

•namespace(命名空间),用于解决类重名问题,可以看做“类的文件夹”。
•如果代码和被使用的类在一个namespace则不需要using。
•在不同命名空间下的类调用有两种方法:
–写全称  命名空间.类名
–先using引用命名空间,再调用
 

       4.字符串的处理

•string可以看做是char的只读数组。char c = s[1];。例子:遍历输出string中的每个元素。
•C#中字符串有一个重要的特性:不可变性,字符串一旦声明就不再可以改变。所以只能通过索引来读取指定位置的char,不能对指定位置的char进行修改。
•如果要对char进行修改,那么就必须创建一个新的字符串,用s. ToCharArray()方法得到字符串的char数组,对数组进行修改后,调用new string(char[])这个构造函数(暂时不用细研究)来创建char数组的字符串。一旦字符串被创建,那么char数组的修改也不会造成字符串的变化。例子:将字符串中的A替换为a。
 
•练习一:随机输入你心中想到的一个名字,然后输出它的字符串长度  Length:可以得字符串的长度
enum Gnder {     }    class Program    {        static void Main(string[] args)        {            Console.WriteLine("名字");            Length(Console.ReadLine());            Console.ReadKey();        }        static void Length(string name)        {            Console.WriteLine(name.Length);        }    }
•一切类型都可以调用.ToString()方法转换成字符串类型.
 

   5.String类常用方法

•ToLower():得到字符串的小写形式。
•注意字符串是不可变的,所以这些函数都不会直接改变字符串的内容,而是把修改后的字符串的值通过函数返回值的形式返回。s.ToLower()与s=s.ToLower()
•ToUpper():得到字符串的大写形式; Trim()去掉字符串两端的空白。
•s1.Equals(s2, StringComparison.OrdinalIgnoreCase),两个字符串进行比较不区分大小写的比较。
•string[] Split(params char[] separator):将字符串按照指定的分割符分割为字符串数组;
•string[] Split(char[] separator, StringSplitOptions options)将字符串按照指定的char分割符分割为字符串数组( options 取RemoveEmptyEntries的时候移除结果中的空白字符串);
•字符串替换:string Replace(string oldValue, string newValue)将字符串中的出现oldValue的地方替换为newValue。例子:名字替换。
•取子字符串:string Substring(int startIndex),取从位置startIndex开始一直到最后的子字符串;
•string Substring(int startIndex, int length),取从位置startIndex开始长度为length的子字符串,如果子字符串的长度不足length则报错。
•bool Contains(string value)判断字符串中是否含有子串value
•bool StartsWith(string value)判断字符串是否以子串value开始;
•bool EndsWith (string value)判断字符串是否以子串value结束;
•int IndexOf(string value):取子串value第一次出现的位置。
•Int IndexOf(string value,int startIndex)
 
    今天在云和学院学习了这些,也是我迈向面向面向对象的开始··························

今天学习的构造函数与字符串的详解