GIS开发笔记20210419之创建项目、内部语法知识点、面向对象编程、接口、结构查询、新建类注意事项

创建的项目是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)        
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值