目录
访问修饰符
1.public:公有成员,完全公开,没有访问限制, 所有的类都可以访问
2.private:私有成员 ,在类的内部才可以访问(类中字段和方法默认的访问修饰符是private)
3.protected:保护成员,该类内部和继承类(子类)可以访问
4.internal:内部的,当前程序集内(本项目)可以访问
5.protected internal:内部保护的, 只能是本项目内部或继承类(子类)访问
静态方法和实例方法
1.静态方法:static关键字表示
在自己本类中,调用两种方法
(1)类名.静态方法名
(2)静态方法名
不在自己本类中:类名.静态方法名
2.实例方法:需要new实例化
第一步:实例化一个对象
第二步:对象名.方法名
区别:静态方法只能访问自己所在类中的静态成员(包括静态数据成员和静态方法),不能访问实例成员;实例方法既可以访问实例成员,也可以访问静态成员。
静态成员与实例成员:由static修饰的称为静态成员,没有static修饰的称为实例成员。
class Program
{
static void Main(string[] args)
{
Test.Say(); //调用的静态方法在test类中,不再Program类中,要用类名.方法名
Test t = new Test(); //实例方法必须先创建一个对象
t.SayHello(); //调用该方法,对象名.实例名
Console.ReadKey();
}
}
public class Test
{
static int x= 6; //定义了一个静态成员
int y= 7; //定义了一个实例成员
public static void Say() //静态方法,static标识
{
Console.WriteLine("今天天气真好");
x = x+10; //静态方法中只能使用静态成员,不能使用实例成员
}
public void SayHello() //实例方法
{
Console.WriteLine("hello,大家好");
//实例方法既可以使用实例成员,也可以使用静态成员
x = x + 20; //x静态成员
y = y + 10; //y为实例成员
}
}
try-catch捕捉异常
1.try中放可能报异常的代码,发生异常后try代码块中的后续代码不会被执行,catch以后的代码则会继续执行,如果try代码中没有异常,则不会执行catch当中的内容
2.catch当中放出现异常之后需要执行的代码。Exception 类主要属性:Message、StackTrace。message会将错误信息提示出来。
3.finally也可以不写,不管try的语句报不报异常,finally都会执行的,就算try当中有return语句,也会执行finally当中的语句。
string i = "123a";
try
{
int num = Convert.ToInt32(i); //将"123a"转换成int类型,会报异常
}
catch (Exception ex)
{
Console.WriteLine("不是数字!");
//MessageBox.Show(ex.Message); //显示异常的消息,MessageBox.Show在winform窗体中使用
}
finally
{
Console.WriteLine("不管报不报异常,我都会执行的,如果try当中有return语句,在返回前,我也会执行的");
}
Console.ReadKey();
字符串转成数字类型
第一种方法:Convert.ToInt32,to后面可以是任意类型
//将字符串类型转换为int类型
int num = Convert.ToInt32("100");
//由string类型转化为char类型
char chGender = Convert.ToChar("男");
第二种方法: int.Parse(),.Parse前面可以是其他类型,可能会报异常(try-catch解决)
int num1 = int.Parse("100");
第三种方法:int.TryParse(string,out int number); 返回类型为bool值
bool result = int.TryParse("100", out int num2);
if (result)
{
Console.WriteLine(num2); //num2为转换成功后的数字
}
else
{
Console.WriteLine("不是数字");
}
第四种方法:自定义一个mytryparse方法,实现和第三种方法一样的功能
判断是否为数字的方法:IsNum,函数返回值为bool类型
public static bool IsNumber(string str,out int num)
{
string strnum="";
num=0;
try
{
num=int.Parse(strnum);
return true;
}
catch
{
return false;
}
}
Main主函数调用此方法
string strnum = "70";
bool results=IsNumber(strnum, out int nums);
if (result)
{
Console.WriteLine(nums);
}
else
{
Console.WriteLine("不能转换成数字!");
}
类型自动转换规则(以int和double为例)
下面这张图,表示int和double类型的范围,从图中我们可以看出,double类型的范围大于int类型的范围
类型的自动转换,其实就是一种隐式转换,不需要我们写任何条件,就可以进行转换。有隐式转换,就有对应的强制转换,也就是必须要进行显式转换。下面分别介绍隐式转换和显示转换的条件。
int转double就是一种隐式转换
int num1 = 10; //定义一个int类型的变量num1
double num2= 30.5; //定义一个double类型的变量num2
num2 = num1; //将int类型的值赋给double类型,隐式转换
隐式转换的条件:
(1)源类型和目标类型可以兼容(int和double类型就是相互兼容的类型,而字符串和int类型就不兼容)
(2)由低级向高级转换(目标类型大于源类型,在这里,int是低级,double是高级)
其实很好理解,37是int类型,37.0是double类型,可以说所有的int类型数据都可以用double类型的数据表示,也就是说int类型的数据可以隐式转换成double类型的数据。
强制转换:
(1)源类型和目标类型一定要相兼容
(2)由高级向低级的转换,(double类型转换成int类型)
注意:int转double 隐式转换,多小数
double转int 显示转换,丢精度
刚才说到int和string 类型不能兼容,怎么能转换,前面已经介绍过了,在这里补充的是convert不仅仅是内存级别的转换,而是考虑数据意义的转换。convert是一个加工,改造的过程。
Tips:对于表达式
(1)如果一个操作数为double型,则整个表达式可提升为double型
(2)求10/3要想得到3.333的处理
int num1 = 10;
int num2 = 3;
double remainder = num1 * 0.1 / num2;
Console.WriteLine("{0:0.000}", remainder);
Console.ReadKey();