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 , ...
随机推荐
- Spring Boot 2.0 利用 Spring Security 实现简单的OAuth2.0认证方式1
0. 前言 之前帐号认证用过自己写的进行匹配,现在要学会使用标准了.准备了解和使用这个OAuth2.0协议. 1. 配置 1.1 配置pom.xml 有些可能会用不到,我把我项目中用到的所有包都贴出来 ...
- 设置Sysctl.conf用以提高Linux的性能(最完整的sysctl.conf优化方案)
Sysctl是一个允许您改变正在运行中的Linux系统的接口.它包含一些 TCP/IP 堆栈和虚拟内存系统的高级选项, 这可以让有经验的管理员提高引人注目的系统性能.用sysctl可以读取设置超过五百 ...
- windows远程连接mac配置方法
1.开启mac共享服务,设置通过密码进行连接 [系统偏好设置]中选择[共享]打开[屏幕共享]服务,即可允许其他电脑的用户远程查看并控制此电脑.点击[电脑设置]配置访问密码 2. 下载TightVNC, ...
- mysql--Ubuntu下设置MySQL字符集为utf8
1.mysql配置文件地址/etc/mysql/my.cnf 2.在[mysqld]在下方添加以下代码[mysqld]init_connect='SET collation_connection = ...
- 每日英语:Missing at Mobile World Congress: Innovation
The hottest showcase for new technology at this year's Mobile World Congress wasn't in the event's c ...
- 每日英语:Google Scraps Plan to Build Hong Kong Data Center
Internet giant Google Inc. has scrapped a plan to build its own data center in Hong Kong and will in ...
- 【MyBean调试笔记】关于单元的释放顺序
[概述] DEMO提交人:惠商软件 2508696439 问题描述:MDIConsole, DEMO如果Forms单元引用顺序放在mybean.console.pas文件之后如下图所示时: 创建同一 ...
- C语言版——点亮LED灯,深入到栈
在上一篇进行了汇编语言的编写之后,我们采用C语言来编写程序,毕竟C语言才是我们使用最多的语言. 仅仅是点亮LED灯显然太过于简单,我们需要分析最后的反汇编,了解函数调用栈,深入C语言骨髓去分析代码,并 ...
- vps 切换内核
一.安装内核aptitude install linux-image-3.13.0-24-generic linux-headers-3.13.0-24-generic 二.查看已安装的内核dpkg ...
- 基于jQuery经典扫雷游戏源码
分享一款基于jQuery经典扫雷游戏源码.这是一款网页版扫雷小游戏特效代码下载.效果图如下: 在线预览 源码下载 实现的代码. html代码: <center> <h1>j ...