---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------
面向对象就是将代码对象化,世间万物皆对象
访问修饰符: C#中有4个访问修饰符
public :可以在任何地方被访问
intemal :只能在本项目中被访问
private :只能在本类中被访问
preotected :只能在本类的子类中被访问
类
类是对象的类型,对象是类的实例化;类不占内存,对象占内存
例如:
定义了一个Person的类,这个类仅仅是人这个对象的模板,在这个模板中规定人类对象都应该有 姓名 性别 年龄属性和SayHello方法
每个对象的属性都拥有特定的值
类的定义语法:
[访问修饰符] class 类名
{
成员;
......
} 自己写的类中写方法时,先不用加static
通过类来产生一个对象的过程,叫做类实例化
语法: 类 实例化 = new 类();
访问类的属性:
实例名.属性名;
访问类的方法:
实例名.方法名();
只要是没有加static的方法或属性,都必须先实例化(new),再通过实例名.方法名或实例名.属性来访问
加static的方法或属性,可以 直接通过类名.方法名或类名.属性名来访问
在类这个级别,不写访问修饰符默认为intermal
例:在项目中添加一个Person类,Person类具有的属性:姓名,性别,年龄, 方法: 说话
class Person
{
public string name;
public char sex;
public int age;
public void SayHello()
{
Console.WriteLine("我叫{0},我是{1}性,我今年{2}岁了!",name,sex,age);
}
public void Go()
{
Console.WriteLine("{0}正在走路......",name);
}
}
然后再主函数中要调用Person类中得属性和方法,就需要先实例化一个对象,分配空间
class Program
{
int test;
void Hello()
{
Console.WriteLine("Hello World!");
}
static void Main(string[] args)
{
Program p = new Program();
p.test = 18;
Console.WriteLine(p.test);
p.Hello();
Person zsPerson = new Person(); //定义一个变量,这个变量的类型的Person 通过new关键字产生一个Person对象,并把Person产生的对象赋给zsPerson这个变量
Person lsPerson = new Person();
zsPerson.name = "张三";
zsPerson.sex = '男';
zsPerson.age = 18;
lsPerson.name = "李四";
lsPerson.sex='女';
lsPerson.age=16;
zsPerson.SayHello();
zsPerson.Go();
lsPerson.SayHello();
lsPerson.Go();
Console.ReadKey();
}
}
注意:(namespace命名空间)
不在同一个命名空间下的类,不能被直接访问,要想访问别的命名空间下的类有两种方法:
1.通过using引用对方的命名空间
2.写全称,命名空间.类名
using System是.net的根命名空间
属性
什么叫属性: 通俗点说,就是定义一个public的具有get/set方法的变量,这个变量是用于保护一个私有变量(被保护的私有变量为字段)
public int Age
{
get{ }
set { }
}
允许外部访问的变量一定要声明为属性
读写属性:
具有get/set方法的属性叫做读写属性
只读属性:
只有get方法的发展称为只读属性,这个发展只能读取,不能写入
只写属性:
只有set方法的发展称为只写属性,这个发展只能写入,不能读取(只写用的很少)
例:
private string name;
//定义公共的Name用来保护私有的name合法
public string Name
{
get
{ //要读取age时所返回的值
return name;
}
set
{ //value中就存储着用户赋的那个值
if (value == "阿宇")
{
name = "匿名";
}
else
{
name = value;
}
}
}
注意:VS中对私有字段定义属性可以将光标停在变量名,按Ctrl+R,E键,VS会自动生成相应字段的属性
构造方法和构造方法重载
构造方法是一个特殊的方法,它的名字和类的名字相同,并且没有返回值,连void都不写,我们一旦手写一个方法后私系统原先默认给我们添加的那个无参的构造方法就不会再为我们添加了
要实例化一个类,必须调用它的构造方法
构造方法的好处:
1.对多个属性进行赋值进,不需要重复的写实例名
2.可以保证用户在new一个对象的时候必须对某一个属性进行赋值
3.和第2类似,在创建对象时,对只读属性进行初始化
当定义好一个类之后,如果没有写构造方法,那么系统会自动加上一个默认的没有参数的构造方法,在这个方法中什么也不做,也看不到
构造方法要实现重载,必须返回值不同或者相同返回值的构造方法的对应位置的参数类型或个数不同,才能实现构造方法重载
例:
class Student
{
public Student(string name,char sex,int age,double chinese,double math,double english)
{
this.name = name; //this.name表示字段 直接写name表示参数
this.sex = sex;
this.age = age;
this.chinese = chinese;
this.math = math;
this.english = english;
}
//构造方法重载
public Student(string name,char sex,int age)
{
this.name = name;
this.sex = sex;
this.age = age;
this.chinese = 90;
this.math = 80;
this.english = 100;
}
在构造方法中定义好参数字段可以方便在方法调用实例化时直接赋值,简化代码
Student zs = new Student("老鼠",'男',18,90,95,80);
Student xl = new Student("耗子", '女',16,95,85,100);
params
定义前加params传参时不用传数组 可以直接传数组中的值,系统会自动根据参数的长度将其转化为数组
params只能修饰数组
例:
test(10,20,30,40);
static void test(params double[] arr)
{
}
double为长度为4的数组
test(10,20,30,40);
static void test(int age,params double[] arr)
{
}
此时将10赋给age 后边的数系统自动转化为长度为3的数组
例:
int sum = Sum(10, 1, 2, 3, 4, 5); //10赋给Sum里边定义的age 后边的系统会自动根据参数的长度将其转化为数组
Console.WriteLine(sum);
static int Sum(int age,params int[] arr)
{
int iSum = 0;
for (int i = 0; i < arr.Length; i++)
{
iSum += arr[i];
}
iSum += age;
return iSum;
}
String类
String类表示的是一系列不可变得字符,表示的是无法修改该字符串被分配的堆中的字符串,如果修改了将会新建一个实例,即重新分配内存空间。
如果在字符串前面加上@表示不使用转义字符,否则默认为使用转义字符。
声明String既可以用String也可以用string,String与string的区别是string是C#中的类,而String为Framework中的类,C#中的string将映射为Framework中的String类,即如果使用string编译器会自动编译成Framework中的String类。但是string更加符合C#的规范,所以一般使用的是string
字符串用法:
ToCharArray:得到字符串数组
#region 更改字符串数组 ToCharArray
string s = "Hello World!";
char[] i = s.ToCharArray(); //得到字符串数组
i[1] = 'i'; //修改想要改的字符
s = new string(i); //将修改后的字符重新赋给s 并未改变原先的字符串,只是重新开辟了一块内存空间给s
Console.WriteLine(s); //输出S
#endregion
Length:得到字符串长度
#region 随意输入一个字符串,输出字符串的长度
Console.WriteLine("请输入一个字符串:");
string s = Console.ReadLine();
Console.WriteLine(s.Length);
#endregion
ToLower、ToUpper、Equals:字符串比较
#region 字符串比较
//字符串比较的第一种方法
Console.WriteLine("请A学员输入喜欢的课程:");
string a = Console.ReadLine();
a = a.ToLower(); //1.将输入的字符串全部转换成小写
a = a.ToUpper(); //2.将输入的字符串全部转换成大写
Console.WriteLine("请B学员输入喜欢的课程:");
string b = Console.ReadLine();
b = b.ToLower();
b = b.ToUpper();
if (a == b)
字符串比较的第二种方法 a.Equals(b, StringComparison.OrdinalIgnoreCase) //StringComparison.OrdinalIgnoreCase 忽略大小写
if(a.Equals(b, StringComparison.OrdinalIgnoreCase))
{
Console.WriteLine("你们俩都喜欢" + a);
}
else
{
Console.WriteLine("a喜欢{0},b喜欢{1}", a, b);
}
#endregion
Split:字符串分割
string[] Split(params char[] separator)
将字符串按照指定的分割符分割为字符串数组
string[] Split(char[] separator,StringSplitOptions options)
将字符串按照指定的char分割符分割为字符串数组(options取RemoveEmptyEntries的时候移除结果中的空白字符串)
#region 字符串的分割
string[] Split(params char[] separator)
//将字符串按照指定的*****分割符*****分割为字符串数组
string str = "How are you";
string[] words = str.Split(' '); //因为不用移除空白字符时 char[] 前有定义params 所以直接可以传值过去
Console.WriteLine("上边这句话共有{0}个单词",words.Length); //而下边要移除空白字符时 char[] 前没有定义params 所以传之前得先定义一个char类型的数组,然后再传过去
Console.WriteLine("这几个单词都有:");
for (int i = 0; i < words.Length; i++)
{
Console.WriteLine(words[i]);
}
// string[] Split(char[] separator,StringSplitOptions options) options取RemoveEmptyEntries的时候移除结果中的空白字符串
//将字符串按照指定的*****char分割符*****分割为字符串数组
string str = "How are you?Fine,and you!";
char[] remove = { ' ', '?', ',', '!' };
string[] words = str.Split(remove, StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine("上边这句话共有{0}个单词", words.Length);
Console.WriteLine("这几个单词都有:");
for (int i = 0; i < words.Length; i++)
{
Console.WriteLine(words[i]);
}
#endregion
Replace:替换
#region Replace替换
//Replace替换 可以是两个字符,也可以是两个字符串
string date = Console.ReadLine();
date = date.Replace('/', '-');
string[] words = date.Split(new char[] { '-' }, StringSplitOptions.RemoveEmptyEntries);
//string[] words = date.Split(new char[] { ' ', '/', '-', ',' }, StringSplitOptions.RemoveEmptyEntries); //options取RemoveEmptyEntries的时候移除结果中的空白字符串
Console.Write("您输入的日期为:{0}年{1}月{2}日", words);
#endregion
Substring:截取字符串
#region 截取字符串Substring
string str = "Hello World!";
string result = str.Substring(6); //从指定字符开始截取到字符串最后 World!
string Str = str.Substring(6, 2); //从指定字符开始截取到第二的参数的长度的位置 Wo 6为从字符串第六位开始,2为要截取的长度
Console.WriteLine(result);
Console.WriteLine(Str);
#endregion
Contains:字符串检测,经常用于过滤关键字
#region Contains 经常用于过滤关键字
string[] words = { "xxoo", "和谐" };
Console.WriteLine("请输入你要发表的话:");
string i=Console.ReadLine();
int j;
for (j = 0; j < words.Length; j++)
{
if (i.Contains(words[j]))
{
i = i.Replace(words[j], "***");
}
}
Console.WriteLine("你要发表的话为:"+i);
#endregion
IndexOf:用于搜索某一个字符串中是否包含某一个字符串,如果包含,则返回位置,如果不包含,则返回-1
#region IndexOf
string str = "Hello World!";
Console.WriteLine(str.IndexOf("o", 5));
#endregion
检索一句话中多次出现e的位置
#region 检索一句话中多次出现e的位置
int start = 0, at = 0, count = 0;
Console.WriteLine("请输入你一句话:");
string adress = Console.ReadLine();
int end = adress.Length;
Console.WriteLine("您所输入的话中e出现的位置分别是: ");
while (start <= end && at > -1)
{
count = end - start;
at = adress.IndexOf("e", start, count);
if (at == -1)
{
break;
}
Console.Write(" {0} ", at + 1);
start = at + 1;
}
#endregion
这些只是自己做的一些字符串的基本用法,不全,重要的是学习方法
---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------