C# 初学

突然对C#充满了兴趣,于是兴致勃勃的折腾起来。

下面是折腾的过程:

IDE,我选择了vs2017,不过这货的安装选项略多,对于新手来说各种坑。无论如何,选择”.NET桌面开发”即可,其他的全部留空。

然后新建项目,C#项目,控制台项目。

可以开搞了!

总的来说,C#和Java很像 -- 抽象、虚函数、继承、接口等,然而又具有C++的很多特性,如运算符重载!

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Go
    {
        static void Main(string[] args)
        {
            Cat cat1 = new Cat("a_cat");
            Cat cat2 = new Cat("b_cat");
            Cat cat3 = new Cat("c_cat");

            Console.WriteLine(Animal.Count);
            Console.WriteLine(cat1);

            //测试委托
            DoIt doIt = cat1.Speak;
            doIt += cat2.Speak; //注意,只要方法签名一致即可连续添加
            doIt += cat3.Speak;
            doIt += () =>
            {
                Console.WriteLine("来自Lambda");
            };//lambda
            doIt();

            //测试静态类方法扩展
            Dog dog = new Dog("a_dog");
            dog.Jump();//这个方法,类似于js的apply或者call

            //测试隐式转换
            Cat cat = dog;
            Console.WriteLine(cat);
            //测试显式转换
            dog = (Dog)cat;
            Console.WriteLine(dog);

            //模拟事件
            Client c1 = new Client();
            Client c2 = new Client();

            Animal.NewAnimal += c1.WantAnimal;
            Animal.NewAnimal += c2.WantAnimal;

            Animal dogq = new Dog("Q-dog");

            //测试集合
            ArrayList al = new ArrayList();
            al.Add(cat1);
            al.Add(cat2);
            al.Add(cat3);
            al.Add(cat2);
            Console.WriteLine("ArrayList‘s count is "+al.Count);
            al.Remove(cat2); //只会删除第一个
            Console.WriteLine("ArrayList‘s count is " + al.Count);

            List<Animal> list = new List<Animal>();
            list.Add(cat1);
            list.Add(cat2);
            list.Add(cat3);
            list.Add(cat2);
            Console.WriteLine("List‘s count is " + list.Count);

            Stack<Animal> stack = new Stack<Animal>();
            stack.Push(cat1);
            stack.Push(cat2);
            stack.Push(cat3);
            Console.WriteLine("stack.Peek() = " + stack.Peek() + "; stack.Count = " + stack.Count);
            Console.WriteLine("stack.Pop() = " + stack.Pop() + "; stack.Count = " + stack.Count);

            Queue<Animal> queue = new Queue<Animal>();
            queue.Enqueue(cat1);
            queue.Enqueue(cat2);
            queue.Enqueue(cat3);
            Console.WriteLine("queue.First() = " + queue.First() + "; queue.Count = " + queue.Count);
            Console.WriteLine("queue.Last() = " + queue.Last() + "; queue.Count = " + queue.Count);
            Console.WriteLine("queue.Dequeue() = " + queue.Dequeue() + "; queue.Count = " + queue.Count);

            Dictionary<int, Animal> dic = new Dictionary<int, Animal>();
            dic.Add(1, cat1);
            dic.Add(2, cat2);
            dic.Add(3, cat3);
            Console.WriteLine("dic.Keys = " + dic.Keys + "; dic.Count = " + dic.Count);
            Console.WriteLine("自定义扩展dic.Print() = " + dic.PrintKeys() + "; dic.Count = " + dic.Count);
            Console.WriteLine("自定义扩展dic.PrintValues() = " + dic.PrintValues() + "; dic.Count = " + dic.Count);
            Console.WriteLine(dic);

            Console.ReadLine();
        }
    }

    public delegate void DoIt();//委托,托管一堆方法?!位置,放这里也行?

    interface ISpeak
    {
        void Speak();
    }
    interface IEat
    {
        void Eat();
    }
    class Animal
    {
        protected string _name;
        public static int Count;//用来计数,数一下有多少animal的实例
        public delegate void Handler();//事件订阅
        public static event Handler NewAnimal; //事件

        public Animal() {
            ++Count;
            //通知各位,有新动物来啦
            NewAnimal?.Invoke();
        }
        public Animal(string Name):this()
        {
            _name = Name;
        }
        static Animal()
        {
            Count=0;
        }
        public void setName(string Name)
        {
            _name = Name;
        }
        public string getName()
        {
            return _name ;
        }
        override public string ToString() //重写父类的
        {
            return "Animal[_name="+_name+", Count="+Count+"]";
        }
    }
    //狗类,继承自动物,实现接口
    class Dog : Animal, ISpeak, IEat
    {
        public Dog(string Name) : base(Name) { }
        public void Eat()
        {
            Console.WriteLine("我是一只狗,名字:["+base._name+"],我在吃狗粮!");
        }

        public void Speak()
        {
            Console.WriteLine("我是一只狗,名字:[" + base._name + "],汪汪汪!");
        }
        //定义一个隐式转换
        public static implicit operator Cat(Dog dog)
        {
            return new Cat(dog._name);//new 会改变Animal.Count
        }
    }
    //猫类,继承自动物,实现接口
    class Cat : Animal, ISpeak, IEat
    {
        public Cat(string Name) : base(Name) { }
        public void Eat()
        {
            Console.WriteLine("我是一只猫,名字:[" + base._name + "],我在吃小鱼干~");
        }

        public void Speak()
        {
            Console.WriteLine("我是一只猫,名字:[" + base._name + "],喵~");
        }

        //定义一个显式转换
        public static explicit operator Dog(Cat cat)
        {
            return new Dog(cat._name);//new 会改变Animal.Count
        }
    }
    //静态类 扩展方法
    static class DogJump
    {
        public static void Jump(this Dog dog)
        {
            Console.WriteLine(dog + " is jumping...");
        }
        public static string PrintKeys(this Dictionary<int, Animal> dic)
        {
            var s="";
            foreach (var item in dic.Keys)
            {
                s += item;
                s += ", ";
            }
            return s;
        }
        public static string PrintValues(this Dictionary<int, Animal> dic)
        {
            var s = "";
            foreach (var item in dic.Values)
            {
                s += item;
                s += ", ";
            }
            return s;
        }
    }

    //定义一个客户类
    class Client
    {
        public void WantAnimal()
        {
            Console.WriteLine("Great! I wanna see it!");
        }
    }

}
时间: 2024-08-04 07:24:17

C# 初学的相关文章

STM32初学Keil4编译时出现 Error:Failed to execute &#39;BIN40/Armcc&#39;

一种是在系统开始--运行里输入cmd,查看armcc状态.详情见推文: http://blog.csdn.net/hicui/article/details/7350805(笔记记录,请勿见怪) 都没有问题的话,那么可以尝试: 在keil里的菜单栏依次选择Project->Manage->Components,Environment andBooks(CEB)(或者直接点击工具栏的图标), 然后在CEB里选择Folders/Extensions标签页,在RealView Folder里选择ke

mongodb 初学 目录

mongodb 初学 索引 啦啦啦 MongoDB 教程 NoSQL 简介 MongoDB 简介 Windows 平台安装 MongoDB Linux平台安装MongoDB mongodb 在 Ubuntu系统上的安装及卸载 Mongodb启动命令mongod参数说明 Mac OSX 平台安装 MongoDB MongoDB 概念解析 MongoDB - 连接 MongoDB 创建数据库 MongoDB 删除数据库 MongoDB 插入文档 MongoDB 更新文档 MongoDB 删除文档 M

初学ArcGIS API for JavaScript

初学ArcGIS API for JavaScript 对于初学者来说,关于esri提供的一些样式和dojo自带的一些样式还是需要有一定的了解,这块在<WebGIS开发从基础到实践>讲解的特别详细,在这里以笔记的形式来帮助自己加以理解和记忆. esri.css样式主要用于ESRI提供的小部件与组件,比如地图.信息框等.此外,还可以引用Dojo提供的样式表,Dojo提供了4组样式,分别是claro\tundra\soria以及nihilo,每种是一组定义用户界面的字体.颜色与大小等设置.在Arc

初学 Python(十一)——切片

初学 Python(十一)--切片 初学 Python,主要整理一些学习到的知识点,这次是切片. #-*- coding:utf-8 -*- ''''' 切片 ''' L = ['name','age','sex','address','company'] #取前2个 print L[0:2] print L[:2] #取倒数第一个 print L[-1] #取后两个 print L[-2:] #取倒数第二个 print L[-2:-1] print len(L) #隔一个数取一次,从第一个数开

【Python】初学编程适合学Python?其有何用?

初学编程适合学Python?其有何用? 作者:白宁超 2016年10月4日19:59:39 摘要:python语言俨然不算新技术,七八年前甚至更早已有很多人研习,只是没有现在流行罢了.之所以当下如此盛行,我想肯定是多因素造成了,当然市场需求的重要因素.吴军博士对大数据流行的解释与python流行或许有些默契.数据一直以来都存在,只是在历史条件下,由于计算性能和技术发展的原因,与之匹配的数据处理技术还不是很先进,以至于很多数据被我们舍弃了.同样,python语言简洁流畅等多种优点,也会让第一次接触

初学jsp

编写网页的语言有ASP,PHP,JSP三种,但jsp是其中功能最强大,却也最复杂的语言,小学期在老师的带领下我初步认识了这种语言,虽然对这种语言有了初步的了解,但离精通还离得很远,很多时候都跟不上老师的节奏,第一次接触这门语言确实是一个很痛苦的过程,老师讲的东西也掌握的不是很好,但总算还是小有所获,我知道想掌握这门语言还有很长的一段路要走,在这里就分享一下我的初学心得. SP就是Java,只是它是一个特别的Java语言,加入了一个特殊的引擎,这个引擎将HTTPServlet这个类的一些对象自动进

Mysql初学入门

最近花了两个晚上研究了一下Mysql的初学应用,在此进行整理记录. 1.Windows系统下的安装 我用的是win10系统,在http://dev.mysql.com/downloads/mysql/ 下载相应版本的Mysql,下载后进行解压即可. 下载好后,进行安装,安装及配置步骤参照http://jingyan.baidu.com/article/f3ad7d0ffc061a09c3345bf0.html . 安装好后,在DOS下输入 net start mysql并回车会启动mysql服务

初学HTML

今天在MOOC上学了HTML基础中的基础 有了点表面的认识 很喜欢MOOC这样的教学方式 赞一个 下面是一些自己的笔记和感想: 准备考研 现在感觉时间还算充裕 想学点web前端开发基础 下面是需要掌握的基础技术: 1. HTML是网页内容的载体.内容就是网页制作者放在页面上想要让用户浏览的信息,可以包含文字.图片.视频等. 2. CSS样式是表现.就像网页的外衣.比如,标题字体.颜色变化,或为标题加入背景图片.边框等.所有这些用来改变内容外观的东西称之为表现. 3. JavaScript是用来实

初学github

初学github 这两天初学了一下github,学会了如何在github上创建一个仓库,并向仓库中将写的程序push到仓库中.在这里做一个小结. git和github 首先说说什么是git什么是github. git Git是一个开源的分布式版本控制系统,它可以有效.高速的处理从很小到非常大的项目版本管理.相信很多人都有过这样的遭遇:我写好了一版代码,然后发现有个地方写的不太对,然后开始修改代码,改了一大片.改完之后运行,然后发现,修改之前的某个函数还需要用,这时候又不能疯狂ctrl+z退回去,

Python初学的易犯错误

当初学 Python 时,想要弄懂 Python 的错误信息的含义可能有点复杂.这里列出了常见的的一些让你程序 crash 的运行时错误. 1)忘记在 if , elif , else , for , while , class ,def 声明末尾添加 :(导致 “SyntaxError :invalid syntax”) 该错误将发生在类似如下代码中: ? 1 2 if spam == 42     print('Hello!') 2)使用 = 而不是 ==(导致“SyntaxError: i