C# 核心基础(1) 持续更新
using System; namespace ConsoleApplicationCShape
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello Wrox.");
Console.ReadLine();
return;
}
}
}
变量初始化
int i = ;
bool mBool = false;
int x = , y = ;
类型推断关键字 var
var name = "Aaron";
var age = ;
var isRabbit = false; Type nameType = name.GetType();
Type ageType = age.GetType();
Type isRabbitType = isRabbit.GetType(); Console.WriteLine("name is type " + nameType.ToString());
Console.WriteLine("age is type " + ageType.ToString());
Console.WriteLine("isRabbit is type " + isRabbitType.ToString());
Console.ReadLine();
输出
name is type System.String
age is type System.Int32
isRabbit is type System.Boolean
- 变量必须初始化。否则,编译器就没有推断变量类型依据
- 初始化器不能为空。
- 初始化必须放在表达式中。
- 不能把初始化器设置为一个对象,除非在初始化器中创建一个新对象。
一旦声明了变量,推断出了类型,不能改变变量类型。
变量作用域
- 只要类在某个作用域内,其字段也在该作用域内。
- 局部变量存在于声明该变量的语句块或方法结束的右花括号之前的作用域内。
- 在for、while或类似语句中声明的局部变量存在于该循环体内。
局部作用域冲突
只要变量的作用域是程序的不同部分,就不会有问题,也不会产生多义性。注意,同名局部变量不能再同一作用域内声明两次。
int j = ;
for (int i = ; i < ; i++)
{
int j = ;
Console.WriteLine(i + j);
}
for (int i = ; i < ; i++)
{
int j = ;
Console.WriteLine(i + j);
} for (int i = ; i < ; i++)
{
int j = ;
Console.WriteLine(i + " " + j);
}
字段和局部变量的作用域冲突
字段 (静态变量)
static int j =
局部变量
int j =
static int j = ;
static void Main(string[] args)
{
int j = ;
Console.WriteLine(j);
Console.WriteLine(Program.j);
Console.ReadLine();
}
常量
- 常量必须声明时初始化。执行值后,就不能再改写了。
- 常量的值必须能在编译时用于计算。因此,不能从一个变量中提取的值用来初始化常量。(如果一定要这样做,可以用 readonly 只读)
- 常量总是静态的,所以不能常量声明中包含修饰符 static
const int j = ;
预定义数据类型
值类型和引用类型
C#数据类型分为 值类型 和 引用类型
值类型直接存储其值,引用类型存储对值得引用。
值类型存储在堆栈中,引用类型存储在托管堆上。
值类型
int x = ;
int j = ;
引用类型
Vector x, y;
x = new Vector();
x.X = ;
Console.WriteLine(x);
y = x;
y.X = ;
Console.WriteLine(y);
Console.WriteLine(x);
输出
,
,
,
注意 我这里 Vector 只有在 System.Windows.WindowsBase 命名空间中,大家要测试引用类型时,需创建WPF程序。
要创建对象,须使用new 关键字。因为 x 和 y 引用同一对象,所以修改 x,也会影响 y 。当然值类型是不会有影响的。
CTS类型
C# 有15个预定定义类型,其中13个是值类型,2个引用类型(string 和 object)
8个整数类型 sbyte、short、int、long、byte、ushort、uint、ulong
2个浮点类型 float、double
1个高精度浮点数 128位 decimal
1个布尔类型 bool
1个单字符类型 char
2个预定义引用类型 object、string
声明 decimal
decimal d = 12.30M;
声明 char
char c = 'x';
声明 string
string str = "Hello world";
转义字符
string str1 = "C:\\Program Files (x86)\\ADSafe";
string str2 = @"C:\Program Files (x86)\ADSafe";
甚至包含换行符
string str2 = @"C:\Program Files (x86)
\ADSafe";
Console.WriteLine(str2);
流控制
if
int intInput = Int32.Parse(Console.ReadLine()); if (intInput == )
{
Console.WriteLine("Input 10");
}else if (intInput == )
{
Console.WriteLine("Input 20");
}
else
{
Console.WriteLine("Input Error");
}
Console.ReadLine();
如果条件分支只有一条语句,就无须使用花括号:
if (intInput == )
Console.WriteLine("Input 10");
switch
while (true)
{
int intInput = Int32.Parse(Console.ReadLine());
switch (intInput)
{
case :
case :
Console.WriteLine("Input 10");
break;
case :
Console.WriteLine("Input 20");
goto case ;
break;
case :
Console.WriteLine("Input 30");
break;
default:
Console.WriteLine("Input Error");
break;
}
}
break 结束当前循环
continue 退出当前迭代,进行下一轮迭代
循环
for
for (int i = ; i < ; i++)
{
Console.WriteLine(i);
}
i++ ==> i = i + 1 ==> i += 1
while
int i = ;
while (i < )
{
i++;
Console.WriteLine(i);
}
do while
int i = ;
do
{
i++;
Console.WriteLine(i);
} while (i < );
foreach
int[] arr = new int[] {,,,,,};
foreach (int value in arr)
{
Console.WriteLine(value);
}
跳转语句 goto、break、continue、return
枚举
public enum TimeOfDay
{
Morning = ,
Afternoon = ,
Evening =
}
使用
TimeOfDay time = TimeOfDay.Afternoon;
Console.WriteLine(time.ToString());
Console.WriteLine((int)time);
名称空间
namespace ConsoleApplicationCShape
{
namespace CustomerPhoneBookApp
{
class NamespaceExample
{ }
} class Program
{
static void Main(string[] args)
{ }
}
}
using语句
using System;
using System.Collections.Specialized;
名称空间的别名
using System;
using System.Collections.Specialized;
using CusNameSpace = MyNamespace; namespace MyNamespace
{
class Test { }
} namespace ConsoleApplicationCShape
{
class Test { }
class Program
{
static void Main(string[] args)
{
//不使用限定名向上搜索匹配的命名空间,查找不到会输出错误
Console.WriteLine(typeof(Test));
Console.WriteLine(typeof(CusNameSpace::Test));
Console.ReadLine();
}
}
}
全局命名空间
using System;
using System.Collections.Specialized; class Test { } namespace ConsoleApplicationCShape
{
class Test { }
class Program
{
static void Main(string[] args)
{
Console.WriteLine(typeof(Test));
Console.WriteLine(typeof(global::Test));
Console.ReadLine();
}
}
}
每个类都有个Type对象 this.GetType().Namespace;
Main方法
C#程序从Main开始执行的,这个方法必须是类或结构的静态方法,返回类型必须是 int 或 void。修饰符指定什么访问级别并不重要。
多个main方法
在编译C#时,在多个main方法是,需要指定Main方法所属类的全名,告诉程序的入口点。
csc DoubleMain.cs /main:Wrox.MathExample
给main传递参数
static void Main(string[] args)
{
for (int i = ; i < args.Length; i++)
{
Console.WriteLine(args[i]);
}
Console.ReadLine();
}
输出
>ConsoleApplicationCShape.exe z z
static void Main(string[] args)
有关编译 C# 文件的更多内容
csc /target 选项
- /t:exe 控制台应用程序 默认
- /t:library 带有清单的类库
- /t:moudle 没有清单的组件
- /t:winexe Windows应用程序
/out 选项
指定编译器生成的输出文件名
/reference 或 /r 引用程序集
csc /r:system.windows.forms.dll
示例
csc /t:library MathLibrary.cs
编译文件时
csc MathClient.cs /r:MathLibrary.dll
控制台 I/O
Console.WriteLine();
- Console.ReadLine();
格式化字符串
Console.WriteLine("{0}、{1}",100,200);
Console.WriteLine("{0,30}\n{1,30}", 100, 200);
{w,n} n 是参数索引,w是宽度值。
格式化字符串类型
- C 本地货币格式
- D 十进制,如果需要精度,前面加上0
- E 科学计数法格式,默认小数位数6 格式化字符串的大小写(e或E)指定指数符号的大小写
- F 浮点数类型,可以设置小数位数,可以为0
- G 普通格式
- N 数字格式,用逗号表示千分符如 32 767.44
- P 百分数格式
- X 十六进制格式
除了 e/E 之外,格式字符串都不需要考虑大小写。
本地货币格式,精度设置为两位小数
double d = 0.234;
Console.WriteLine("{0, 9:C2}", d);
注释
// this is a single-line comment
/*
* This Comment
* spans mutiple lines.
*/
生成 注释XML 文档
/// <summary>
/// 返回两位整数相加的值
/// </summary>
/// <param name="x">X 整数值</param>
/// <param name="y">Y 整数值</param>
/// <returns>返回相加值</returns>
public int Add(int x, int y)
{
return x + y;
}
csc /t:library /doc:MathLibrary.xml MathLibrary.cs
C# 预处理指令
使用预处理指令可以境值编译器编译与额外功能相关的代码。还是可以提供调试信息的代码时,也可以用。
#define 和 #undef
#define 指定编译器名称符号
#undef 删除指定编译器名称符号
#if、#elif、#else、#endif
#define ENTERPRISE using System;
using System.Collections.Specialized; namespace ConsoleApplicationCShape
{ class Program
{
static void Main(string[] args)
{
#if ENTERPRISE && W2K == false
Console.WriteLine("Hello");
#endif
Console.ReadLine();
}
} }
#warning 和 #error
如果编译器遇到 #warning 会给用户显示 #warning指令后面的文本。
如果遇到 #error,显示后面的文本,作为编译器错误消息,退出编译,不会生成IL代码(.net 中间代码)。
#if ENTERPRISE
#warning This is a warning
#endif
#error This is a error
然后可以在VS2015的错误列表中看到。
#region 和 #endregion
#region 和 #endregion 把一段代码给定给定名称一个块。
#region 这是一个输入文件块
Console.ReadLine();
#endregion
然后可以折叠这块代码
#line
改变编译器在警告或错误信息中显示的文件名和行号信息。
#line 2 "Core.cs"
#warning 警告
#error This is Error
#pragma
抑制或还原指定的编译警告。
如下面 禁止"字段未使用警告"
#pragma warning disable 15
static void Main(string[] args)
{
int neverUsedField;
Console.ReadLine();
}
#pragma warning restore 15
C# 核心基础(1) 持续更新的更多相关文章
- Pig语言基础-【持续更新中】
***本文参考了Pig官方文档以及已有的一些博客,并加上了自己的一些知识性的理解.目前正在持续更新中.*** Pig作为一种处理大规模数据的高级查询语言,底层是转换成MapReduce实现的, ...
- nodejs基础【持续更新中】
简介 Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js uses an event-dr ...
- python开发--基础知识-(持续更新)
python基础 --基础: 1, 第一句python - 用cmd 调用--python (路径)+(文件名)) 扩展名是任意的 - 导入模块是,如果不是.py文件,可能导入不成功 - python ...
- MVC基础知识-持续更新....
1.如何在自动生成的视图中显示需要的字段名称: 在相应的定义字段中添加Display,例如: [Display(Name = "用户名:")] public string User ...
- Java基础——集合(持续更新中)
集合框架 Java.util.Collection Collection接口中的共性功能 1,添加 booblean add(Object obj); 往该集合中添加元素,一次添加一个 boolea ...
- Java基础——多线程(持续更新中)
如何建立一个执行路径呢? 通过查询API文档 java.lang.Thread类 该类的描述中有创建线程的两种方式 1.继承Thread类 (1).将类声明为 Thread 的子类 (2).该子类应重 ...
- Linux 基础命令 持续更新中...
1.ls 显示当前文件/文件夹 显示文件大小: ls -lh 显示隐藏文件: ls -a 显示文件详细信息: ls -l (ll)2.pwd 显示当前所在路径 cat 显示当前文件下所有内容3.cd ...
- GNSS基础(持续更新)
1.整周模糊度成功率 可参考文献:GNSS整周模糊度概率特性 2.正太分布 见百度百科 https://baike.baidu.com/item/%E6%AD%A3%E6%80%81%E5%88%86 ...
- Linux服务器安全检测维护基础汇总/持续更新
登陆系统查询可以用户 w命令可以显示在线用户,passwd -l xxx可以锁定xxx用户无法登陆,如果此时可以用户在线,使用kill命令踢下线 查看可疑进程 ps -ef命令锁定pid,或者pido ...
随机推荐
- jQuery UI Widget(1.8.1)工作原理
/*! * jQuery UI Widget 1.8.1 * * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) * Dual l ...
- spring中的ApplicationListener监听器
监听器在使用过程中可以监听到某一事件的发生,进而对事件做出相应的处理. 首先自定义一个监听器myListener实现ApplicationListener接口 @Repository public c ...
- elasticsearch基本概念理解+elasticsearch 的shards unassigned处理方法 -- 最佳运维实践 - 集群规划
1.es与MySQL的概念对比 2.概念理解 2.1 Index : 一个索引即是文档的集合 2.2 Document : 一个文档即是一个可被索引的基础单元信息,一条记录: 2.3 Replicas ...
- cent7配置阿里yum源
阿里云Linux安装镜像源地址:http://mirrors.aliyun.com/CentOS系统更换软件安装源第一步:备份你的原镜像文件,以免出错后可以恢复.mv /etc/yum.repos.d ...
- [转帖]linux命令dd
linux命令dd dd 是diskdump 的含义 之前学习过 总是记不住 用的还是少. http://embeddedlinux.org.cn/emb-linux/entry-level/20 ...
- HashMap集合-遍历方法
# HashMap集合-遍历方法 先定义好集合: public static void main(String[] args) { Map<String,String> onemap=ne ...
- Java各版本新特性总结
Java或者说JDK的更新一般分为两部分内容:Java语言.JVM(C.C++编写),但通常情况下都不会单独发布,因为新的语言特性需要特定的JVM支持才行.下面我总结了从古至今Java各版本的新 ...
- 【Python基础】13_Python中的PASS
pass关键字的使用 在程序分支中,如果不想立刻执行该分支,可使用pass占位符,pass不表示任何含义,仅保证程序不会报错. 如: action_str = input("请选择希望执行的 ...
- 【思维】Kenken Race
题目描述 There are N squares arranged in a row, numbered 1,2,...,N from left to right. You are given a s ...
- linux下的终端利器 tmux 安装以及使用
ref :https://www.jianshu.com/p/fd3bbdba9dc9 Introduction 为什么使用tmux? 因为如果我们用terminal连接remote server.发 ...