1,接口没有返回值,。
2,接口与抽象类的区别
接口:只能包含抽象方法(只有方法的声明,没有方法体)
抽象类:可以包含抽象方法,也可以包含普通方法
3,
1,接口没有返回值,。
2,接口与抽象类的区别
接口:只能包含抽象方法(只有方法的声明,没有方法体)
抽象类:可以包含抽象方法,也可以包含普通方法
3,
类的对象 toString
// public override void Exam() 重写父类(基类)的方法
//public new void Exam() new 关键字可以显式隐藏从(父类)基类继承的成员。
索引关键字 this
public string this[int index]{
get{
return name [index];
}
set{
name[index] = value;
}
}
列表的遍历
遍历的两种方式:
1.for循环,遍历所有的索引。
for(int i=0;i<list.Count;i++{
循环体;list[i]
}
2.foreach遍历。
List<int> list = new List<int>(50);
list.Add(34);list.Add(234);
foreach(int temp in list)
{
Console.WriteLine(temp);
}
列表的一些常见操作(增加 删除 改 查)
插入数据:list,Insert(i,list[i]);
删除数据:list.Remove(list[i]);只会移除匹配的第一个数据
修饰符
修饰符,用来类型或者成员的关键字。修饰符可以指定方法的可见性。
public:同一程序集(DLL或EXE)中的任何其他代码或引用该程序集的其他程序集都可以访问该类型或成员。
private:只有同一类或结构中的代码可以访问该类型或成员。
. protected:只有同一类或结构或者此类的派生类中的代码扌可以访问该类型或成员。-internal:同一程序集中的任何代码都可以访问该类型或成员,但的代码不可以。protected internal:在一程序集中,protected internal体现的是internal的性质﹔在其他程序集中,protected internal体现的是protected的性质。
·
public DrivedClass(int attack,int hp,int speed):base(hp,speed){
this.attack = attack;
}
这可以调用父类的值,
在子类的构造函数里加冒号:base(hp,speed) 调用父类的构造方法
普通类里是不能包括抽象方法的
抽象方法只能包含在抽象类里,抽象类可以没有抽象方法。
.密封类 se
base. 访问父类里面的成员
private 访问权限最高,只能在本类中访问
proyected 访问权限中等,可以在子类中访问
public 访问权限最高、
、
this. ---指定当前对象
在类名后面加上冒号 :加上继承父类的类名
栈空间比较小,但是读取速度快 ->商店
堆空间比较大,但是读取速度慢 ->仓库
栈的特征:
数据只能从栈的顶端插入和删除|
把数据放入栈顶称为入栈(push)
从栈顶删除数据称为出栈(pop)
-后进先出( Last In First Out )
堆
堆是一块内存区域,与栈不同,堆里的内存能够以任意顺序存入和移除
GC Garbage Collector垃圾回收器
CL R的GC就是内存管理机制,我们写程序不需要关心内存的使用,因为这些都是CLR帮
我们做了。
自动化创建
当你系统里没有创建一个属性
但定义了一个属性的简写方法,则系统会自动创建一个成员变量
(用于只读或只写)
public int Id
{
get;set;
}
//当没有的成员的定义去访问,则要通过属性去访问成员
Console.WriteLine("id:" + Id);
匿名类型
(根据你后面赋值来决定的)
var agv=20; ->整型
var name="小李" ->字符串类型
//定义一个学生类
class Studens
{
private string name;
private int agv;
private string sex;
private int id;
//定义一个name的get和set方法
//一、
public void setName(string name)
{
this.name = name;
}
public string getName()
{
return name;
}
//简写版
public string Name
{
get
{
return name;
}
set //value 参数
{
name = value;
}
}
public void Show()
{
Console.WriteLine("name:"+name);
Console.WriteLine("agv:" + agv);
Console.WriteLine("sex:" + sex);
Console.WriteLine("id:" + id);
}
public Studens()
{
}
public Studens(string name, int agv, string sex, int id)
{
this.name = name;
this.agv = agv;
this.sex = sex;
this.id = id;
}
}
static void Main(string[] args)
{
//调用刚创建类的对象
Studens stu = new Studens();
//stu.Show();
stu.setName("张三");
Console.WriteLine(stu.getName());
stu.Name = "李四";
Console.WriteLine(stu.Name);
}
class BaseClass{
利用类创建一个对象
static void Main(string[] args)
{
Console.WriteLine("请输入两个数字,每行一个");
//string number1 = "";
//int n1 = Convert.ToInt32(Console.ReadLine());
//string number2 = Console.ReadLine();
//在外面定义一个全局变量
int n1 = 0;
int n2 = 0;
//try
//{
// //在try里调用全局变量,来进行传值
// n1 = Convert.ToInt32(Console.ReadLine());
// n2 = Convert.ToInt32(Console.ReadLine());
//}catch (FormatException e)
//{
// Console.WriteLine("你输入的数据,不符合规则,请重新输入!");
// n1 = Convert.ToInt32(Console.ReadLine());
// n2 = Convert.ToInt32(Console.ReadLine());
//}
//上述代码还有问题 后面的用户输入没有进行异常检测,所以下述进行了完善
while (true)
{
try {
n1 = Convert.ToInt32(Console.ReadLine());
n2 = Convert.ToInt32(Console.ReadLine());
break;
}
catch (FormatException e)
{
Console.WriteLine("你输入的数据,不符合规则,请重新输入!");
}
}
Console.WriteLine(n1 + n2);
}
try{
//捕抓异常
}catch(){
//处理异常
catch块用来捕捉异常,当代码发生异常,那么异常的类型和catch块中的类型一样的时候,就会执行该catch块,如果catch块的参数不写,表示发生任何异常都执行这个catch块
}
finally{
不管代码有没有异常,都会执行
}
异常处理(捕捉异常) try ... catch ... finally语句
我们处理异常的语法结构如下(包含了三个关键字try catch finally)
如何查看自己的代码中有多少个断点;
调试-->窗口-->断点