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(, cat1);
dic.Add(, cat2);
dic.Add(, 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=;
}
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!");
}
} }
C# 初学的更多相关文章
- DDD初学指南
去年就打算总结一下,结果新换的工作特别忙,就迟迟没有认真动手.主要内容是很多初学DDD甚至于学习很长时间的同学没有弄明白DDD是什么,适合什么情况.这世界上没有银弹,抛开了适合的场景孤立的去研究DDD ...
- gulp初学
原文地址:gulp初学 至于gulp与grunt的区别,用过的人都略知一二,总的来说就是2点: 1.gulp的gulpfile.js 配置简单而且更容易阅读和维护.之所以如此,是因为它们的工作方式不 ...
- 初学seaJs模块化开发,利用grunt打包,减少http请求
原文地址:初学seaJs模块化开发,利用grunt打包,减少http请求 未压缩合并的演示地址:demo2 学习seaJs的模块化开发,适合对seajs基础有所了解的同学看,目录结构 js — —di ...
- 初学Vue2.0--基础篇
概述: 鉴于本人初学,使用的编译器是webStorm,需添加对VUE的支持,添加方法可以参考 http://www.jianshu.com/p/142dae4f8b51. 起步: 1. 扎实的 Jav ...
- 初学Python
初学Python 1.Python初识 life is short you need python--龟叔名言 Python是一种简洁优美语法接近自然语言的一种全栈开发语言,由"龟叔&quo ...
- Javascript初学篇章_5(对象)
对象 Javascript是一种面向对象的语言,因此可以使用面向对象的思想来进行javascript程序设计对象就是由一些彼此相关的属性和方法集合在一起而构成的一个数据实体.举个例子,一只猫是个对象, ...
- 初学Objective-C语言需要了解的星星点点
其实大多数开发初学者都有一些相同的特点,可以说是一种“职业病”.Most有其他平台开发基础的初学者,看到Xcode就想摩拳擦掌:看到Interface Builder就想跃跃欲试:而 ...
- matlab初学之句柄
文章出处:http://www.cnblogs.com/CBDoctor/archive/2012/04/06/2434072.html 在matlab中,每一个对象都有一个数字来标识,叫做句柄.当每 ...
- 初学HTML5、初入前端
学习HTML5是一个漫长的过程,当中会遇到很多技术与心态上的变化.刚开始学习,我们不能发力过猛,需要一个相对稳定的状态去面对.多关注一些自己感兴趣的网站和技术知识,建立自己的信心与好奇心,为以后的学习 ...
- Python初学的易犯错误
当初学 Python 时,想要弄懂 Python 的错误信息的含义可能有点复杂.这里列出了常见的的一些让你程序 crash 的运行时错误. 1)忘记在 if , elif , else , for , ...
随机推荐
- dom4j: 生成XML时文本中回车换行无效
属性文本中回车换行在输出时被dom4j自动去掉了. 解决办法: 将format.setTrimText(false); 即可.因为 createPrettyPrint()方法中有 format.set ...
- Tomcat 安装为服务后台自动启用
1.首先设置环境变量 2.Java_home 3.path 4.在运行输入cmd命令后 输入tomcat所安装的路径文件中的service.bat直接拖进来即可 此时要注意 如果服务器用户没有管理员权 ...
- RHEL7.2安装部署redmine
redmine的安装方式有很多种,本文使用docker进行安装,关于rhel7的docker安装可以参考这里 1. 使用docker安装redmine [root@localhost ~]# dock ...
- zsh与oh-my-zsh
在开始今天的 MacTalk 之前,先问两个问题吧: 1.相对于其他系统,Mac 的主要优势是什么?2.你们平时用哪种 Shell?…… 第一个童靴可以坐下了,Mac 的最大优势是 GUI 和命令行的 ...
- android Socket 编程
Socket 通信 1.UDP实现 (DatagramSocket) [客户端] //首先创建一个DatagramSocket对象 DatagramSocket socket = new Datag ...
- 【驱动】Flash设备驱动基础·NOR·NAND
Flash存储器 ——>Flash存储器是近几年来发展最快的存储设备,通常也称作闪存.Flash属于EEPROM(电可擦除可编程只读存储器),是一类存取速度很高的存储器. ——>它既有RO ...
- 前端复制粘贴clipBoard.js的使用
<!DOCTYPE html> <html> <head> <title>ClipBoard.js使用:修改HTML</title> < ...
- 使用canvas制作简单表格
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- java 多线程 28 : 多线程组件之 Semaphore 信号量
Semaphore是非常有用的一个组件,它相当于是一个并发控制器,是用于管理信号量的.构造的时候传入可供管理的信号量的数值,这个数值就是控制并发数量的,就是同时能几个线程访问.我们需要控制并发的代码, ...
- Python生成一个不含回文字符串的字符串
[本文出自天外归云的博客园] 回文字符串介绍 回文字符串就是对称的字符串,例如: “ABA” “ABBA” “ABCBA” 题目 给定一个字符串,请发明一种方法,让字符串中不包含回文字符串. 我的解法 ...