C#快速学习笔记(译)

 

下面是通过代码快速学习C#的例子。

1.学习任何语言都必定会学到的hello,world!

using System;
public class HelloWorld
{
public static void Main(string[] args) {
Console.Write("Hello World!");
}
}

2.原始的C#编译器(你可以使用下面的命令行编译C#)

C:>csc HelloWorld.cs

你将得到:

HelloWorld

详情可参见: http://sourceforge.net/projects/nant

3.读取文件

A:读取整个文件到字符串

using System;
namespace PlayingAround {
class ReadAll {
public static void Main(string[] args) {
string contents = System.IO.File.ReadAllText(@"C:\t1");
Console.Out.WriteLine("contents = " + contents);
}
}
}

B:从一个文件中读取所有行到数组中

using System;
namespace PlayingAround {
class ReadAll {
public static void Main(string[] args) {
string[] lines = System.IO.File.ReadAllLines(@"C:\t1");
Console.Out.WriteLine("contents = " + lines.Length);
Console.In.ReadLine();
}
}
}

C:逐行读取文件不检查错误(对于大文件很有作用)

StreamReader sr = new StreamReader("fileName.txt");
string line;
while((line= sr.ReadLine()) != null) {
Console.WriteLine("xml template:"+line);
} if (sr != null)sr.Close(); //应该在最后或使用块

4.写文件

A:简单写入所有文本(文件不存在将创建,存在将重写,最终关闭文件)

using System;
namespace PlayingAround {
class ReadAll {
public static void Main(string[] args) {
string myText = "Line1" + Environment.NewLine + "Line2" + Environment.NewLine;
System.IO.File.WriteAllText(@"C:\t2", myText);
}
}
}

B:使用Streams将一行文字写入文件

using System;
using System.IO; public class WriteFileStuff { public static void Main() {
FileStream fs = new FileStream("c:\\tmp\\WriteFileStuff.txt", FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs);
try {
sw.WriteLine("Howdy World.");
} finally {
if(sw != null) { sw.Close(); }
}
}
}

C:使用using访问文件(当block完整时using隐式调用Dispose(),这也会关闭文件,下面的代码请仔细参悟。)

using System;
using System.IO; class Test {
private static void Main() {
for (int i = 0; i < 5000; i++) {
using (TextWriter w = File.CreateText("C:\\tmp\\test\\log" + i + ".txt")) {
string msg = DateTime.Now + ", " + i;
w.WriteLine(msg);
Console.Out.WriteLine(msg);
}
}
Console.In.ReadLine();
}
}

D:"using" as "typedef" (a la "C")

using RowCollection = List<Node>;

E:写一个简单的XML片段的艰难方法

static void writeTree(XmlNode xmlElement, int level) {
String levelDepth = "";
for(int i=0;i<level;i++)
{
levelDepth += " ";
}
Console.Write("\n{0}<{1}",levelDepth,xmlElement.Name);
XmlAttributeCollection xmlAttributeCollection = xmlElement.Attributes;
foreach(XmlAttribute x in xmlAttributeCollection)
{
Console.Write(" {0}='{1}'",x.Name,x.Value);
}
Console.Write(">");
XmlNodeList xmlNodeList = xmlElement.ChildNodes;
++level;
foreach(XmlNode x in xmlNodeList)
{
if(x.NodeType == XmlNodeType.Element)
{
writeTree((XmlNode)x, level);
}
else if(x.NodeType == XmlNodeType.Text)
{
Console.Write("\n{0} {1}",levelDepth,(x.Value).Trim());
}
}
Console.Write("\n{0}</{1}>",levelDepth,xmlElement.Name);
}

F:写一个简单XML片段的简单方法

StringWriter stringWriter = new StringWriter();
XmlTextWriter xmlTextWriter = new XmlTextWriter(stringWriter);
xmlTextWriter.Formatting = Formatting.Indented;
xmlDocument.WriteTo(xmlTextWriter); //xmlDocument 可以被 XmlNode替代
xmlTextWriter.Flush();
Console.Write(stringWriter.ToString());

G:写入XML的对象或者集合必须有一个默认的构造函数

public static string SerializeToXmlString(object objectToSerialize) {
MemoryStream memoryStream = new MemoryStream();
System.Xml.Serialization.XmlSerializer xmlSerializer =
new System.Xml.Serialization.XmlSerializer(objectToSerialize.GetType());
xmlSerializer.Serialize(memoryStream, objectToSerialize);
ASCIIEncoding ascii = new ASCIIEncoding();
return ascii.GetString(memoryStream.ToArray());
}

H:并且它也要能使XML转换成对象

public static object DeSerializeFromXmlString(System.Type typeToDeserialize, string xmlString) {
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(xmlString);
MemoryStream memoryStream = new MemoryStream(bytes);
System.Xml.Serialization.XmlSerializer xmlSerializer =
new System.Xml.Serialization.XmlSerializer(typeToDeserialize);
return xmlSerializer.Deserialize(memoryStream);
} Example
[Test]
public void GetBigList() {
var textRepository = ObjectFactory.GetInstance<ITextRepository>();
List<BrandAndCode> brandAndCodeList = textRepository.GetList(...);
string xml = SerializeToXmlString(brandAndCodeList);
Console.Out.WriteLine("xml = {0}", xml);
var brandAndCodeList2 = DeSerializeFromXmlString(typeof (BrandAndCode[]), xml);
}

I:关于类型的几句话

类型一般包括数据成员和方法成员,比如int,它就包括了一个值和一个方法ToString()。

C#中所有值都是类型的实例。

C#提供了内置的,或预定义的,直接的语言,被编译器理解,并为他们划出关键词。这些值的类型包括SBYTE,短整型,长字节,USHORT(无符号短整型),UINT(无符号整型),ULONG(无符号长整型),浮点数,双精度浮点数胡,小数,布尔和char(字符型)。预定义的引用类型是字符串和对象。这些类型分为不同的类型在“系统”命名空间中也有别名,如整型int被重命名为System.Int32 。

C#在系统的命名空间中还提供了内置的类型如DateTime类型,当然编译器并不能直接知道这些类型。

所有C#类型均在下面几种分类之一:

值类型(大多数内置类型如int、double和自定义struct、没有方法只为一个值得enum类型)

引用类型(任何类,数组等)

泛型类型参数,指针类型

使用类自定义的类型

J:Write formated output:

int k = 16;
Console.WriteLine(" '{0,-8}'",k); // produces: '16 '
Console.WriteLine(" '{0,8}'",k); // produces: ' 16'
Console.WriteLine(" '{0,8}'","Test"); // produces: ' Test'
Console.WriteLine(" '{0,-8}'","Test");// produces: 'Test '
Console.WriteLine(" '{0:X}'",k); //(in HEX) produces: '10'
Console.WriteLine(" '{0:X10}'",k); //(in HEX) produces:'0000000010'
Console.WriteLine( 1234567.ToString("#,##0")); // writes with commas: 1,234,567

K:命名空间(命名空间的作用是为了减少混乱)

using Monkeys = Animals.Mammals.Primates;
class MyZoo { Monkeys.Howler; }

L:使用String.Format()把decimals 变成strings

s.Append(String.Format("Completion Ratio: {0:##.#}%",100.0*completes/count));

或者使用ToString()方法在 double 对象上:

s.Append(myDouble.ToString("###.###")

又或者

String.Format("{0,8:F3}",this.OnTrack)

M:格式化DateTime对象

DateTime.Now.ToString("yyyyMMdd-HHmm"); // will produce '20060414-1529'

5.构造函数,静态构造函数和析构函数的​​示例:

using System;
class Test2
{
static int i;
static Test2() { // a constructor for the entire class called
//once before the first object created
i = 4;
Console.Out.WriteLine("inside static construtor...");
}
public Test2() {
Console.Out.WriteLine("inside regular construtor... i={0}",i);
}
~Test2() { // destructor (hopefully) called for each object
Console.Out.WriteLine("inside destructor");
} static void Main(string[] args)
{
Console.Out.WriteLine("Test2");
new Test2();
new Test2();
}
}

运行:

inside static construtor...
Test2
inside regular construtor... i=4
inside regular construtor... i=4
inside destructor
inside destructor

未完待续。

鹜落霜洲,雁横烟渚,分明画出秋色。暮雨乍歇,小楫夜泊,宿苇村山驿。何人月下临风处,起一声羌笛。离愁万绪,闲岸草、切切蛩吟似织。 为忆芳容别后,水遥山远,何计凭鳞翼。想绣阁深沉,争知憔悴损,天涯行客。楚峡云归,高阳人散,寂寞狂踪迹。望京国。空目断、远峰凝碧。
 
分类: C#

C#快速学习的更多相关文章

  1. 60分钟Python快速学习(给发哥一个交代)

    60分钟Python快速学习 之前和同事谈到Python,每次下班后跑步都是在听他说,例如Python属于“胶水语言啦”,属于“解释型语言啦!”,是“面向对象的语言啦!”,另外没有数据类型,逻辑全靠空 ...

  2. LinqPad工具:帮你快速学习Linq

    LinqPad工具:帮你快速学习Linq 参考: http://www.cnblogs.com/li-peng/p/3441729.html ★:linqPad下载地址:http://www.linq ...

  3. 快速学习C语言一: Hello World

    估计不会写C语言的同学也都听过C语言,从头开始快速学一下吧,以后肯定能用的上. 如果使用过其它类C的语言,如JAVA,C#等,学C的语法应该挺快的. 先快速学习并练习一些基本的语言要素,基本类型,表达 ...

  4. 【Java线程池快速学习教程】

    1. Java线程池 线程池:顾名思义,用一个池子装载多个线程,使用池子去管理多个线程. 问题来源:应用大量通过new Thread()方法创建执行时间短的线程,较大的消耗系统资源并且系统的响应速度变 ...

  5. 【Java的JNI快速学习教程】

    1. JNI简介 JNI是Java Native Interface的英文缩写,意为Java本地接口. 问题来源:由于Java编写底层的应用较难实现,在一些实时性要求非常高的部分Java较难胜任(实时 ...

  6. 快速学习bootstrap前台框架

    W3c里的解释 使用bootstrap需要注意事项 1.  在html文件第一行要加上<!doctype html>[s1] 2.  导入bootstrap.min.css文件 3.  导 ...

  7. C#快速学习笔记(译)

    下面是通过代码快速学习C#的例子. 1.学习任何语言都必定会学到的hello,world! using System; public class HelloWorld { public static ...

  8. Dapper快速学习

    Dapper快速学习 我们都知道ORM全称叫做Object Relationship Mapper,也就是可以用object来map我们的db,而且市面上的orm框架有很多,其中有一个框架 叫做dap ...

  9. ASP.NET快速学习方案(.NET菜鸟的成长之路)

    想要快速学习ASP.NET网站开发的朋友可以按照下面这个学习安排进度走.可以让你快速入门asp.net网站开发!但也局限于一般的文章类网站!如果想学习更多的技术可以跟着我的博客更新走!我也是一名.NE ...

  10. 60分钟Python快速学习(转)

    60分钟Python快速学习(给发哥一个交代) 阅读目录 第一步:开发环境搭建: 第一个Python功能:初识Python 02.Python中定义变量不需要数据类型 03.在Pythod中定义方法 ...

随机推荐

  1. 【Swift初见】Swift词典

    顾名思义.当我们仰望的时候,我们将基于索引查找我们需要找到的资源.在swift这同样适用,每个对象包括字典key和value.我们key为了找到当前这个key相应的value.与数组不同的是,字典项字 ...

  2. SDUT 1124-飞跃荒野(三维BFS)

    飞跃原野 Time Limit: 5000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描写叙述 勇敢的法里奥出色的完毕了任务之后.正在迅速地向自己的基地撤退.但因为 ...

  3. Unix命令操作

    基本命令 [ man 查看 ]--万能命令 1.ls 列出文件 (-al) 2.cd 转换目录 3.mkdir 建立新目录 4.cp 拷贝文件 (-R) 5.rm 删除文件 (-rf) 6.mv 移动 ...

  4. PHP_零基础学php_3PHP函数、传参函数、默认参数、函数返回值

    <?php function say_hello() //无参数 { $name="tang"; echo "hello,".$name; echo &q ...

  5. 【Unity Shaders】Mobile Shader Adjustment —— 为手机定制Shader

    本系列主要參考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同一时候会加上一点个人理解或拓展. 这里是本书全部的插图.这里是本书所需的代码和 ...

  6. Redis 中文入库成功,读取数据写入文件乱码问题

    近期须要用到redis ,可是在编码这个问题上,纠结了非常久.        需求 :每天一个进程将中文文件入库到redis中(不定时更新) ,另外几个进程读取redis中的信息 ,并处理数据结果.使 ...

  7. UiAutomator源码分析之注入事件

    上一篇文章<UiAutomator源码分析之UiAutomatorBridge框架>中我们把UiAutomatorBridge以及它相关的类进行的描述,往下我们会尝试根据两个实例将这些类给 ...

  8. 权限设计实现(MVC4+Bootstrap+ PetaPoco+Spring.Net)

    权限设计实现(MVC4+Bootstrap+ PetaPoco+Spring.Net) 一.前言 至毕业后一直在做企业Web开发,做过的项目也有不少,每个项目的框架设计都不是一样,但是每个项目的权限模 ...

  9. 【剑指offer】员工年龄排序

    典型的以空间换时间问题,思路非常重要! /* 员工年龄排序 员工可能有几万名,要求时间复杂度为O(n) 思路:员工的年龄必定在一个范围内,比方0-99,那么我们建立一个大小为100的辅助数组,然后遍历 ...

  10. Canvas入门(3):图像处理和渲染文本

    资源:http://www.ido321.com/997.html 一.图像处理(非特别说明,全部结果均来自最新版Google) 在HTML 5中,不仅能够使用Canvas API绘制图形,也能够用于 ...