这几篇c#博客基本是菜鸟教程的读书笔记,适合有c++/java/python基础的朋友们(太过基础的东西我删掉了,有些小订正)
helloworld例子
- 新建c#空项目,添加类。类文件后缀是cs。行尾要加分号。
using System; // namespace declaration. 可能不止一个
namespace csharptest // namespace
{
class HelloWorldApplication // 与 Java 不同的是,文件名可以不同于类的名称。
{
static void Main(String[] args) // 所有c#程序的入口点
{
Console.WriteLine("Hello world");
Console.ReadKey(); // 针对VS.NET用户,指等待一个按键输入,避免闪退
}
}
}
- ide执行。我用的是vs2019,本专栏也都是基于vs2019+win10的。
- 如果用命令行编译:
csc XXX.cs
此时会出现exe。如果找不到csc命令,去环境变量-系统变量-设置Path,加的内容是:
C:\Windows\Microsoft.NET\Framework\v4.0.30319
(根据你自己系统的版本改)
标识符
必须以字母、下划线、@开头(@if是有效标识符),不能有奇怪符号,不能使用C#类库名称。
数据类型
值类型
定义举例
double d = 5673.74;
int i = 75;
float f = 53.01f;
bool b = true;
引用类型
内置的引用类型有:object、dynamic和string。
用户自定义的引用类型:class、interface和delegate。
当一个值类型转为对象类型时,称为装箱,反正为拆箱。
object obj;
obj = 100; // 装箱
dynamic的类型检查是运行时发生的。
dynamic d = 20;
string是object的派生类。
String str = "\hello";
String str = @"\hello"; // 这样会把转义字符\当作普通字符
其实等价于
String str = "\\hello";
@也可以任意换行,换行符、缩进空格都是计算在字符串长度之内的。感觉像python的r’’。
指针类型
指针类型类似c/c++中的指针,存储的是内存地址。
char* cptr;
类型转换
隐式转换:不会导致数据丢失的,默认的
显式转换:强制类型转换,需要加运算符并且会造成数据丢失
double d = 5673.74;
int i = (int)d; // 5673
内置的类型转换方法(这里菜鸟写的有点含糊了,我试了才发现理解错了)
// 这些限制挺多的,比如Double其实都没有ToSingle…
// 不过一般都可以ToString(),这些应该是String类型可用的
ToBoolean ToByte ToChar ToDateTime ToDecimal ToDouble ToInt16 ToInt32 ToInt64 ToSbyte
ToSingle(转换为小浮点数) ToString ToType ToUInt16 ToUInt32 ToUInt64
Console.WriteLine(d.ToString());
变量
int d = 3, f = 5;
// 接受用户输入
int num;
num = Convert.ToInt32(Console.ReadLine());
常量
定义:const int a = 0;
整数常量
0x或0X表示十六进制,0表示八进制,无前缀表示十进制。后缀:u表示unsigned,L表示long,大小写都可,后缀顺序不定。
浮点常量
这里菜鸟教程写得有误,下面这样是正确的。
314159E-5
.2e-5
210f
字符常量
\ ’ “” ? 都需要转义,也就是加
\ooo 1~3位八进制数
\xhh 十六进制
字符串常量
定义在“”或@""里
运算符
有++和–,逻辑运算符用&& || 和!,位运算符有& | ^ ~ << >>。
sizeof()和typeof()
总结:跟c++/python基本一致吧。