与 Java 不同的是,文件名可以不同于类的名称。
标识符可以包含@,且可以以 @ 开头
变量分为值类型、引用类型、指针类型
值类型在线程栈分配空间,引用类型在托管堆分配空间
参考:https://www.cnblogs.com/yinrq/p/5588330.html
值类型(System.ValueType)
引用类型
内置的 引用类型有:object、dynamic 和 string。
Object类型(System.Object)
Object类型是C# 通用类型系统(Common Type System - CTS)中所有数据类型的终极基类。是 System.Object 类的别名。对象(Object)类型可以被分配任何其他类型(值类型、引用类型、预定义类型或用户自定义类型)的值。但是,在分配值之前,需要先进行类型转换。
当一个值类型转换为对象类型时,则被称为 装箱;另一方面,当一个对象类型转换为值类型时,则被称为 拆箱。
Dynamic类型
类似于Python变量。
可以存储任何类型的值在动态数据类型变量中。这些变量的类型检查是在运行时发生的。
动态类型与对象类型相似,但是对象类型变量的类型检查是在编译时发生的,而动态类型变量的类型检查是在运行时发生的。
String类型(System.String)
指针类型
与C++指针一样。
装箱,拆箱
当一个值类型转换为对象类型(引用类型)时,则被称为 装箱;另一方面,当一个对象类型(引用类型)转换为值类型时,则被称为 拆箱。
// 装箱
int i=1;
object obj=(object)i;
// 拆箱
object obj=”1”;
int i=(int)obj;
// 值类型变为引用类型不一定要装箱,例如:
string str = "joye.net" + 26; //需要将26装箱为string类型
string str1 = "joye.net" + 26.ToString(); //tostring后不需要装箱
ref, out, in
面向对象
权限控制
除掉public, private, protected,还有internal
默认为internal
internal代表同一程序集中能访问到(一个能生成exe或dll的项目,VS中的一个project)
嵌套类
参考:https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/classes-and-structs/nested-types
类、构造、接口里面可以嵌套类。
嵌套类型均默认为 private;仅可从其包含类型中进行访问。
嵌套类可以访问外部类的所有属性和方法,外部类只能访问内部类修饰符为public、internal的属性和方法。
接口
using System;
interface IMyInterface
{
// 接口成员
void MethodToImplement();
}
class InterfaceImplementer : IMyInterface
{
static void Main()
{
InterfaceImplementer iImp = new InterfaceImplementer();
iImp.MethodToImplement();
}
public void MethodToImplement()
{
Console.WriteLine("MethodToImplement() called.");
}
}
反射
参考:https://www.runoob.com/csharp/csharp-reflection.html
using System.Reflection;
System.Reflection.MemberInfo info = typeof(MyClass);