创建的项目是C#控制台
创建后,我们打开program,会发现里面有using…
我们有时候需要补全:
补全为:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
然后就会发现以自己项目命名的一个“命名空间”。
里面有一个program类,这里面是主程序入口,内包含着一个main函数。
static void Main(string[] args){}
内部语句知识点:
1.console是一个静态类
Console.Write 表示向控制台直接写入字符串,不进行换行,可继续接着前面的字符写入。
Console.WriteLine 表示向控制台写入字符串后换行。
Console.Read 表示从控制台读取字符串,不换行。
Console.ReadLine 表示从控制台读取字符串后进行换行。
Console.ReadKey 获取用户按下的下一个字符或功能键,按下的键显示在控制台窗口中。
Console.Beep 通过控制台扬声器播放提示音。
Console.Clear 清除控制台缓冲区和相应的控制台窗口的显示信息。
输出到控制台就是把数据输出到控制台并显示出来。.Net框架提供了console类实现这个任务,输出方式如下:
Console.WriteLine();
Console.Write();
Console.WriteLine(输出的值);
Console.Write(输出的值);
Console.WriteLine(“输出的格式字符串”,变量列表);
Console.Write(“输出的格式字符串”,变量列表);
Console.WriteLine("This is {0}, this is {1} and {2}",strName[0],strName[1],strName [2],strName3]);
这种方式中包含两个参数:“格式字符串”和变量列表。“This is {0}, this is {1} and {2}”这是格式字符串,{0}、{1}、{2}叫做占位符,代表后面依次排列的变量表,0对应变量列表的第一个变量,1对应变量列表的第2个变量,依次类推,完成输出。
从控制台输入
从控制台输入,就是从控制台输入数据给程序。
Console类提供的输入方法:
Console.ReadLine(); 这一句代码返回一个字符串型数据,可以把它直接赋值给字符串变量,如:
string strname=Console.ReadLine();
有时需要从控制台输入数字,就用到前面介绍的内容,数据转换,如:
int num=int.Parse(Console.ReadLine());
int num=Convert.ToInt32(Console.ReadLine());
上面两句代码效果相同,可以根据自己的习惯选择任意一种。
注意:
Console.ReadLine()和Console.Read()的输入结果完全不同,不能混用。
Console.Read(), 返回值为首字符的ASCII码
Console.ReadLine(), 返回值为字符串。
也就是说read方法只能读取第一个字符,而ReadLine能读多个字符也可以换行读取
Console.ReadKey()的作用:
read是从控制台读取,key表示按下键盘,那么组合在一起的意思就是获取用户按下功能键显示在窗口中,用在前面的代码起到窗口暂停的功能,在调试状态下,只有按
下任意键后窗口才会关闭
转载于:
https://www.cnblogs.com/why1115/p/4418657.html
console.Readkey();//暂停的一个过程,输入任意 一个 字符
有时需要从控制台输入数字,就用到前面介绍的内容,数据转换,如:
int num=int.Pares(Console.ReadLine());
int num=Convert.ToIn32(Console.ReadLine());
例如:
/*----------------做加法运算-------------*/
Console.WriteLine("Hello World!please put in the first number");
//Console是一个静态类
//Console.ReadKey();//暂停的一个过程,输入任意 一个 字符
//做加法运算
string firstData=Console.ReadLine();//下面有红色的下划线,说明有错误,可以用快捷键,ctrl+J选子功能
```csharp
Console.WriteLine("Hello World!please put in the second number");
string secondData = Console.ReadLine();
// Console.WriteLine(firstData+secondData);输入12,输入13,输出213
Console.WriteLine("the result:"+firstData + secondData);//输入12,输入13,输出213
int firstInt = Convert.ToInt16(firstData); //convert转换,是一个静态类
int secondInt = Convert.ToInt16(secondData);
int result = firstInt + secondInt;
Console.WriteLine("the result:"+result);//输入12,输入13,输出25,值得注意的是,这里的“+”努克
2.面向对象编程
①添加类,类名称首字母大写
②声明类:
Bird bird = new yanzi();//抽象类不可以new出来
//可以new出来的对象,都是组件类
//默认情况下,类内属性是私有的
③多态的实现方法(2种)
1)虚函数
*在创建的类的父类里面,方法或者属性函数,设置为抽象类。
范例(Eat):
父类函数:
using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
using System.Threading.Tasks;
namespace _20210419
{
//public static abstract class Bird 抽象类不能是密封或者静态的,所以必须是public且不能static
public abstract class Bird //首先改为public,加上static类,就不能有构造函数,
{
//类有三个部分,属性,字段,方法
private int legNumber;
//构造函数中给它赋值
//构造函数和类名一样
public Bird()//构造函数没有返回值
{
this.LegNumber = 2;//this是指创建出来的对象本身,
}
定义属性,可以用get set 函数,可以用快捷键,定义完private字段,光标放在后面,在按住ctrl+R+E,点击确定
public int LegNumber
{
get => legNumber;
set => legNumber = value;
//value是什么? 为什么set语句不能注释
}
//----------------------方法-------首字母大写-------------
public virtual void Eat()
{
Console.WriteLine("happy");
}
//声明一个抽象方法
public abstract void Bark();//抽象方法,不可以用方法体,即函数体,即{}
//具体实现,是在子类中实现
/*------------------接口-------------------直接去调用方法-------------接口就是代表我一部分能力---------------*/
//飞的能力,用接口的方式去定义
public virtual void FLy()
{
Console.WriteLine("bird fly");
}
}
}
子类函数:
using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
using System.Threading.Tasks;
/*C++里面可以有多个父类,但是C#只能有一个,多继承应用接口*/
namespace _20210419
{
public class yanzi:Bird,IFlyable,IEat//继承
{
//public override void Eat()
public void Eat()
{
Console.WriteLine(" yanzi happy");
}
public override void Bark()
{
Console.WriteLine(" yanzi zhazha");
}
public int FlyHeight { get; set; }//接口里面只进行声明,不进行实现,实现要在:谁继承我接口的地方去实现
public override void FLy() {
Console.WriteLine("jyanzi fly");
}//谁继承他,谁去飞,怎么实现不是在此处说明,所以不能留具体函数体
}
}
主函数:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _20210419
{
class Program//定义了类,且这里是主程序入口,里面包含一个main函数
{
static void Main(string[] args)
{
/*
Console.WriteLine(“Hello World!please put in the first number”);
//Console是一个静态类
//Console.ReadKey();//暂停的一个过程,输入任意 一个 字符
//做加法运算
string firstData=Console.ReadLine();//下面有红色的下划线,说明有错误,可以用快捷键,ctrl+J选子功能
Console.WriteLine(“Hello World!please put in the second number”);
string secondData = Console.ReadLine();
// Console.WriteLine(firstData+secondData);输入12,输入13,输出213
Console.WriteLine(“the result:”+firstData + secondData);//输入12,输入13,输出213
int firstInt = Convert.ToInt16(firstData); //convert转换,是一个静态类
int secondInt = Convert.ToInt16(secondData);
int result = firstInt + secondInt;
Console.WriteLine(“the result:”+result);//加号不可省略
Console.ReadKey();
ctrl+k+c=全注释
ctrl+k+u=全恢复
*/
/*---------------------------------------面向对象编程-------------------------------------*/
//添加类。类名称首字母大写
//声明一个Bird对象
Bird bird = new yanzi();//抽象类不可以new出来
//默认情况下,类内属性是私有的
bird.LegNumber = 3;
//可以new出来的对象,都是组件类
bird.Eat();//输出的是happy,是父类里面的
//领事概念,子类可以转换到父类,父类转换子类需要强制转换,多态的思想
//方法一:可以用虚函数
//方法二:抽象方法,
//作业:抽象类,虚函数,多态概念
bird.Bark();
bird.FLy();
Bird hen = new Hen();
hen.Eat();
hen.Bark();
/*------------------接口-------------------直接去调用方法-------------接口就是代表我一部分能力---------------*/
//飞的能力,用接口的方式去定义
//课上所讲的内容,复写下来当做一个小作业
// hen.FLy();
IFlyable fly = new yanzi();
fly.FLy();
//---------------------------------------结构查询-----------Qi--------------------
IEat eat = fly as IEat;//接口之间的跳转
eat.Eat();
//所有的Ao接口,每一个接口代表一个能力,要访问它另外接口的时候,必须要进行结构查询
}
}
}
总结,将父类设置为虚函数关键字为:virtual
子类该函数需要加关键字:override
在C#当中,一个类只能有一个父类,写法为:
public class yanzi:Bird,IFlyable,IEat//继承
{}
2)抽象函数
范例如上(bark)
总结:
父类设为抽象函数,关键词为abstract
public abstract void Bark();//抽象方法,不可以用方法体,即函数体,即{}
//具体实现,是在子类中实现
子类需要实现该函数
public override void Bark()
{
Console.WriteLine(" hen gaga");
}
④基本概念
抽象类:
https://blog.csdn.net/fhkkkbfgggjk/article/details/85529588
虚函数:
https://blog.csdn.net/weixin_38607041/article/details/101423923
抽象函数:
https://blog.csdn.net/weixin_41798071/article/details/90544009
多态:
https://blog.csdn.net/huwei2003/article/details/18982039?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_baidulandingword-0&spm=1001.2101.3001.4242
3.接口
点击【添加】,选择添加【接口】。
命名方式是第一个字母为大写字母 I 。
下面写能力 ,能力第一个首字母大写
如:IFlyable
例如,上述范例中的“IFlyable”能力。
且利用接口可以构造类,
**
1)接口类运用的是多态的特性,父类可以调用子类的
2)接口类只含有纯虚函数,接口类不能被实例化,但可以有指向接口类的指针,以便于操纵各个子类
3)抽象类表示继承类是什么,接口则表示继承类能做什么
4)抽象类和接口都可以被继承,都不能被实例化,可以有方法的声明,派生类必须实现未实现的方法
5)抽象类可以声明字段、实现的方法、属性,接口只能声明属性、索引器、事件、和方法的声明,不能声明字段
6)抽象类只能被单一继承,接口可以多实现(一个派生类只能继承一个抽象类,但是可以实现多个接口)
**
4.结构查询
IEat eat = fly as IEat;//接口之间的跳转
eat.Eat();
//所有的Ao接口,每一个接口代表一个能力,要访问它另外接口的时候,必须要进行结构查询
5.新建类注意事项
(1)//public static abstract class Bird 抽象类不能是密封或者静态的,所以必须是public且不能static
(2) public abstract class Bird{} //首先改为public,加上static类,就不能有构造函数,
(3)类有三个部分,属性,字段,方法
(4)构造函数 :
①实例构造函数:
1、构造函数的名字与类名相同。
2、使用 new 表达式创建类的对象或者结构(例如int)时,会调用其构造函数。并且通常初始化新对象的数据成员。
3、除非类是静态的,否则会为没有构造函数的类,自动生成一个默认构造函数,并使用默认值来初始化对象字段。
4、构造函数可以有参数,可以以多态的形式存在多个构造函数。
class Brid
{
public int x, y;
// 实例构造函数(默认构造函数)
public Brid()
{
x = 0;
y = 0;
}
// 具有两个参数的构造函数
public Brid(int x, int y)
{
this.x = x;
this.y = y;
}
// 重写toString方法
public override string Eat()
{
return (String.Format("({0},{1})", x, y));
}
static void Main(string[] args)
{
CoOrds p1 = new CoOrds();
CoOrds p2 = new CoOrds(5, 3);
// 使用重写ToString方法显示结果
Console.WriteLine("CoOrds #1 at {0}", p1);
Console.WriteLine("CoOrds #2 at {0}", p2);
Console.ReadKey();
}
}
/* Output:
CoOrds #1 at (0,0)
CoOrds #2 at (5,3)
*/