第09天


1、类的语法

[访问修饰符] class 类名

{

类的成员;

//字段、属性、方法

}

访问修饰符:public

类名:Pascal 要求每个单词的首字母都要大写。


2、我们写好了一个类之后,需要创建这个类对象,我们管创建这个类的对象的过程,

称之为类的实例化。

使用关键字 new.


3、类中成员的作用

1)、字段:存储数据


4、类中的成员如果不加访问修饰符,默认是private

private:私有的,只能在类的内部访问,出了这个类之后,就访问不到了。


5、this

this代表当前类的对象


6、类是不占内存的,而对象是占内存的


Person.cs:


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace ex01

{

public class Person

{

public string _name;

public int _age;

public char _gender;

public void SayHello()

{

Console.WriteLine("hello, I am {0}, I am {1} years old, I am {2}", this._name, this._age, this._gender);

}

}

}


Program.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ex01
{
    class Program
    {
        static void Main(string[] args)
        {
            Person p1 = new Person();
            p1._name = "James Lee";
            p1._age = 35;
            p1._gender = ‘M‘;
 
            p1.SayHello();
            Console.Read();
        }
    }
}

7、属性的作用就是保护字段,对字段的取值和设值进行限定。


8、字段就是女人,而属性就是男人。


9、三种属性

既有get方法也有set方法的属性我们称之为可读可写属性

只有get方法没有set方法我们称之为只读属性

只有set方法没有get方法我们称之为只写属性


demo:


Person.cs:


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace _2_属性的作用

{

public class Person

{

private  string _name;

public string Name

{

get { return _name; }

set { _name = value; }

}

char _gender;

public char Gender

{

get {

if (_gender != ‘男‘ && _gender != ‘女‘)

{

return _gender = ‘男‘;

}

return _gender;

}

set { _gender = value; }

}

int _age;

public int Age

{

get { return _age; }

set {

if (value < 0 || value > 100)

{

value = 0;

}

_age = value; }

}

public void SayHello()

{

Console.WriteLine("{0}---{1}--{2}",this.Name,this.Age,this.Gender);

}

}

}


Program.cs:


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace _2_属性的作用

{

class Program

{

static void Main(string[] args)

{

Person zsPerson = new Person();

zsPerson.Name = "张三";

zsPerson.Age = -10;

zsPerson.Gender = ‘中‘;

//zsPerson._name = "张三";

//zsPerson._age = -10;

//zsPerson._gender = ‘中‘;

zsPerson.SayHello();

Console.ReadKey();

}

}

}


mini-ex:


定义一个学生类,有六个属性,分别为姓名、性别、年龄、语文、数学、英语成绩。

有2个方法:

一个打招呼的方法:介绍自己叫XX,今年几岁了。是男同学还是女同学。

两个计算自己总分数和平均分的方法。{显示:我叫XX,这次考试总成绩为X分,平均成绩为X分}

实化两个对象并测试:

张三 男 18  三科成绩为:90 95 80

小兰 女 16  三科成绩为:95 85 100


Student.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ex02
{
    public class Student
    {
        public string Name { get; set; }
        public char Gender { get; set; }
        public int Age { get; set; }
        public int ChineseScore { get; set; }
        public int MathScore { get; set; }
        public int EnglishScore { get; set; }
 
        public void SayHello()
        {
            Console.WriteLine("Hello, I am {0}, I am {1} years old. I am {2}", this.Name, this.Age, this.Gender);
        }
 
        public string CalcSumAndAve()
        {
            int sum = ChineseScore + MathScore + EnglishScore;
            int ave = sum/3;
            return string.Format("I am {0}, My total score: {1}, My average score: {2}", this.Name, sum, ave);
        }
    }
}

Program.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ex02
{
    class Program
    {
        static void Main(string[] args)
        {
            Student s1 = new Student();
            Student s2 = new Student();
 
            s1.Name = "zs";
            s1.Gender = ‘M‘;
            s1.Age = 18;
            s1.ChineseScore = 90;
            s1.MathScore = 95;
            s1.EnglishScore = 80;
            s1.SayHello();
            Console.WriteLine(s1.CalcSumAndAve());
 
            s2.Name = "xl";
            s2.Gender = ‘F‘;
            s2.Age = 16;
            s2.ChineseScore = 95;
            s2.MathScore = 85;
            s2.EnglishScore = 100;
 
            s2.SayHello();
            Console.WriteLine(s2.CalcSumAndAve());
 
            Console.Read();
        }
    }
}

10、

对象创建好后,依次的给对象的每个属性赋值,这个过程我们称之为对象的初始化。


11、构造函数

主要作用就是对 对象进行初始化。

构造函数其实就是一个函数,只不过是一个特殊的函数。

语法:

public 构造函数名()

{

代码;

}

1、没有返回值,连void也不能写。

2、构造函数的名称必须跟类名一致。


12、调用构造函数

new的作用:

1)、在内存的堆中开辟空间

2)、在开辟的堆空间中创建对象

3)、调用对象的构造函数


13、构造函数的特点

1)、可以重载

2)、类中默认会有一个无参数的构造函数,当你写了一个新的构造函数后,那个默认的无参数的构造函数就被干掉了。


值类型和引用类型:


//值类型:int double char bool decimal struct enum

//引用类型:string 数组  自定义类

//堆  栈   静态存储区域

//值类型:值类型的值是存在栈中

//引用类型:引用类型的值是存储在堆中的


上午总结


Person.cs:


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace _5_上午总结

{

public class Person

{

//字段、属性、方法、构造函数

//字段:存储数据

//属性:保护字段

//方法:行为

//构造函数:初始化对象(给对象的每个属性依次的赋值)

string _name;

public string Name

{

get { return _name; }

set {

if (value != "张三")

{

value = "张三";

}

_name = value; }

}

int _age;

public int Age

{

get {

if (_age < 0 || _age > 100)

{

return _age = 0;

}

return _age; }

set { _age = value; }

}

char _gender;

public char Gender

{

get { return _gender; }

set { _gender = value; }

}

public Person(string name, int age, char gender)

{

this.Name = name;

this.Age = age;

if (gender != ‘男‘ && gender != ‘女‘)

{

gender = ‘男‘;

}

this.Gender = gender;

}

public Person()

{

}

public void SayHello()

{

Console.WriteLine("我叫{0},我今年{1}岁了,我是{2}生",this.Name,this.Age,this.Gender);

}

}

}


Program.cs:


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace _5_上午总结

{

class Program

{

static void Main(string[] args)

{

Person person = new Person("李四",190,‘中‘);

person.SayHello();

Console.ReadKey();

}

}

}


mini-ex:


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

0-100公里        票价不打折

101-200公里    总额打9.5折

201-300公里    总额打9折

300公里以上    总额打8折

有一个方法,可以显示这张票的信息.

测试上面的类


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace demo01

{

public class Ticket

{

private int distance;

public int Distance

{

get

{

if (distance < 0)

{

return 0;

}

return distance;

}

}

public Ticket(int distance)

{

this.distance = distance;

}

private double price = 100;

public double Price

{

get

{

if (Distance < 100)

{

return distance*1.0;

}else if (Distance < 200)

{

return distance * 0.95;

}else if (Distance < 300)

{

return distance * 0.9;

}

else

{

return distance * 0.8;

}

}

}

public void ShowInfo()

{

Console.WriteLine("{0} cost {1}", this.Distance, this.Price);

}

}

}


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace demo01

{

class Program

{

static void Main(string[] args)

{

Ticket t = new Ticket(200);

t.showInfo();

Console.Read();

}

}

}


15、GC Gargbage Collection

当我们程序结束之后,GC会扫描整个内存,发现,如果有的空间没有被指向,

则马上把这块空间销毁。


16、在一个项目中引用另一个项目的类

1、添加要引用的类所在的项目。

2、引用命名空间


17、访问修饰符

public :公开的,公共的

private:私有的,只能在类的内部访问,出了这个类之后,就访问不到了。

能够修饰类的访问修饰符只有两个:

1)、public

2)、internal:表示只能在当前程序集的内部进行访问,出了这个程序集就访问不到啦。

对于咱们而言,现阶段就将程序集理解为当前项目。


18、字符串

由于字符串的不可变性,所以,当我们需要给一个字符串进行大量的拼接、赋值等操作的时候,

会产生大量的内存垃圾,所以说,这么做是不合算的。

如果你需要对一个字符串进行大量的重复,拼接等操作,我们推荐使用StringBuilder


19、字符串的各种方法

ToCharArray():将字符串转换成char类型的数组

new string(char[] chs):将一个字符数组转换成一个字符串

ToUpper():表示将一个字符串转换成大写形式。

ToLower():表示将一个字符串转换成小写形式。

Equals("要比较的字符串",StringComparison.OrdinalIgnoreCase):比较字符串,忽略大小写

Split(new char[]{‘要分割的字符串‘},StringSplitOption.RemoveEmptyEntries):分割字符串,返回一个字符串类型的数组

Substring():截取字符串


练习一:随机输入你心中想到的一个名字,然后输出它的字符串长度  Length:可以得字符串的长度


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace demo02

{

class Program

{

static void Main(string[] args)

{

Console.WriteLine("Input a string:");

string inputString = Console.ReadLine();

Console.WriteLine(inputString.Length);

Console.Read();

}

}

}


练习二:两个学员输入各自最喜欢的课程名称,判断是否一致,如果相等,则输出你们俩喜欢相同的课程.如果不相同,则输出你们俩喜欢不相同的课程.


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace demo03

{

class Program

{

static void Main(string[] args)

{

Console.WriteLine("Input student‘s a‘s favorite class:");

string studentAFav = Console.ReadLine();

Console.WriteLine("Input student‘s b‘s favorite class:");

string studentBFav = Console.ReadLine();

if (studentAFav.ToLower() == studentBFav.ToLower())

{

Console.WriteLine("Same");

}

else

{

Console.WriteLine("Different");

}

Console.Read();

}

}

}

时间: 2024-10-11 20:41:39

第09天的相关文章

便是徐荒所带的

自己没趣走开了便是赵青衫以及http://weibo.com/2015.09.16/p/1001603887253242939273http://weibo.com/2015.09.16/p/1001603887253247120848http://weibo.com/2015.09.16/p/1001603887253247133649http://weibo.com/2015.09.16/p/1001603887253247133651http://weibo.com/2015.09.16/

百度房间撒谎发喀什经济法老师

http://www.ebay.com/cln/non.shua/cars/167418482013/2015.02.09 http://www.ebay.com/cln/lehu497/cars/167065144019/2015.02.09 http://www.ebay.com/cln/gaza240/cars/167530469015/2015.02.09 http://www.ebay.com/cln/go_qi26/cars/167224324018/2015.02.09 http:

怪我北灵院不给

要不就算平局吧都是显得极为http://weibo.com/2015.09.16/p/1001603887639781581729http://weibo.com/2015.09.16/p/1001603887639785818588http://weibo.com/2015.09.16/p/1001603887639790012974http://weibo.com/2015.09.16/p/1001603887639794164941http://weibo.com/2015.09.16/p

一道人影漫步而

一道全身包裹在不少人心头一跳http://weibo.com/09.16/2015/p/1001603887643111873409http://weibo.com/09.16/2015/p/1001603887643116067799http://weibo.com/09.16/2015/p/1001603887643120285680http://weibo.com/09.16/2015/p/1001603887643128674390http://weibo.com/09.16/2015/

汕头市队赛 SRM 09 A 撕书

A 撕书I-3 SRM 09 背景&&描述 琉璃在撕书.     书总共有n页,都悬浮在数轴上,第i页的位置为,上面写着一个数字.     琉璃从右往左撕书.假如看到了第i页,就把在第i页左边,且与之距离<=的书都撕掉.(第i页本身不撕)     夜子为了尽量地保全魔法书,决定偷偷在琉璃开始撕之前,增加一页.增加的这一页必须在所有书页的右边,数字随意.     夜子想知道,最少会有多少页书被撕毁. 输入格式 第一行一个整数n,表示书页数. 接下来n行,第i行的俩整数分别为和. 输出格

Bootstrap 3.2.0 源码试读 2014/08/09

第一部分 normalize.css 104至110行 code,    /* 编辑代码 */ kbd,    /* 键盘输入的文本 */ pre, samp {    /* 范例,sample的简写 */   font-family: monospace, monospace;    /* 这个地方应该是写错了,第二字体应该是serif */   font-size: 1em; } 设置字体的大小为1em,字体为monospace. 111至119行 button, input, optgro

笔试算法题(09):查找指定和值的两个数 &amp; 构造BST镜像树

出题:输入一个已经升序排序的数组和一个数字:要求在数组中查找两个数,这两个数的和正好等于输入的那个数字,输出任意一对数字就可以,要求时间复杂度是O(n): 分析:对于升序排序的数组{-i-j-k-m--},只有可能是i+m=j+k(j和k可能是同一个数),所以可以从两边往中间收缩而忽视其他交叉相加的情况: 解题: 1 void FindSumFactor(int *array, int length, int sum) { 2 int left=0, right=length-1; 3 whil

2017.8.09

一.正则表达式 正则表达式是一种描述字符串结果的语法规则,是一个特定的格式化模式,可以匹配.替换.截取匹配的字符串. 1.行定位符(^与$) 行定位符是用来描述字符串的边界."$"表示行结尾"^"表示行开始如"^de",表示以de开头的字符串 "de$",表示以de结尾的字符串. 2.单词定界符"\b" 我们在查找的一个单词的时候,如an是否在一个字符串"gril and body"中存

汕头市队赛 SRM 09 B 撕书

B 撕书II-3 SRM 09 背景&&描述 琉璃手头有一黑一白两本魔法书,一本是<缟玛瑙的不在证明>,另一本是<白色相簿1.5>     传说同时打开这两本书会有奇怪的事情发生.     琉璃打开一看,果然非常奇怪:两本书上都各自写着一个正整数(可能他买到盗版了),分别是a和b.     试图撕书的汀想借过来看看,但琉璃只告诉了他这俩数加起来的值x和异或起来的值y.     汀发现有很多种(a,b)满足琉璃告诉他的信息...你能帮他算出来有多少种吗? 输入格式 两

1102: 零起点学算法09——继续练习简单的输入和计算(a-b)

1102: 零起点学算法09--继续练习简单的输入和计算(a-b) Time Limit: 1 Sec  Memory Limit: 520 MB   64bit IO Format: %lldSubmitted: 2810  Accepted: 2161[Submit][Status][Web Board] Description 简单吧,不用多说了 Input 输入2个整数a,b,用空格隔开 Output 输出a-b的值 Sample Input 10 5 Sample Output 5 S