类型和变量

[C#类型和变量(原文参考官方教程)]https://docs.microsoft.com/zh-cn/dotnet/csharp/tour-of-csharp/types-and-variables

C#有两种类型:

1. 值类型

1. 简单类型

  1. 有符号的整型:sbyte、short、int、long
  2. 无符号的整型:byte、ushort、uint、ulong
  3. Unicode 字符:char
  4. IEEE 二进制浮点:float、double
  5. 高精度十进制浮点数:decimal
  6. 布尔:bool

2. 枚举类型

格式为 enum E {...} 的用户定义类型
每个枚举类型都有一个可以为任意整型数值类型的基础类型
与C++相同,枚举数可以使用初始值设定项来替代默认值,默认从0开始的整型数值


public class EnumTest
{
enum Day { Sun, Mon, Tue, Wed, Thu, Fri, Sat }; static void Main()
{
int x = (int)Day.Sun;
int y = (int)Day.Fri;
Console.WriteLine("Sun = {0}", x);
Console.WriteLine("Fri = {0}", y);
}
}
/* Output:
Sun = 0
Fri = 5
*/

3. 结构类型

格式为 struct S {...} 的用户定义类型
struct是一种值类型,只要是用于封装小型数据
例如把“书”这个实体所包含的价格,书名和作者三个数据封装成结构体Book

public struct Book
{
public decimal price;
public string title;
public string author;
}

4. 可为null的值类型

值为 null 的其他所有值类型的扩展
在标准类型下的扩展,是 System.Nullable<T> 结构的实例
以int类型作为测试,int类型本身不能初始化为null类型


int? x = null;
if (x.HasValue)
{
Console.WriteLine($"x is {x.Value}");
}
else
{
Console.WriteLine("x does not have a value");
}

输出:

x does not have a value

2. 引用类型

1. 类类型

  1. 其他所有类型的最终基类:objectUnicode
  2. 字符串:string
  3. 格式为 class C {...} 的用户定义类型

C#中,一个类只能从一个基类继承实现,但是一个类可以实现多个接口。

继承 示例
class ClassA { }
single class DerivedClass: BaseClass { }
无,实现两个接口 class ImplClass: IFace1, IFace2 { }
无,实现一个接口 class ImplDerivedClass: BaseClass, IFace1 { }

类成员(包括嵌套的类)可以是 public、protected internal、protected、internal、private 或 private protected。 默认情况下成员为 private。

public:同一程序集中的任何其他代码或引用该程序集的其他程序集都可以访问该类型或成员。

private:只有同一类或结构中的代码可以访问该类型或成员。

protected:只有同一类或者从该类派生的类中的代码可以访问该类型或成员。

internal:同一程序集中的任何代码都可以访问该类型或成员,但其他程序集中的代码不可以。

protected internal:该类型或成员可由对其进行声明的程序集或另一程序集中的派生类中的任何代码访问。

private protected:只有在其声明程序集内,通过相同类中的代码或派生自该类的类型,才能访问类型或成员。

注:
被编译到同一个dll或exe中的程序就是处于同一个程序集中,在不同的dll或exe文件中的程序就是处于不同的程序集中。.net中的程序集就是一个编译器直接生成的dll或可执行的exe文件,包含程序集清单、元数据和MSIL等。是一个或者多个类型定义及资源文件的集合体。

下面的示例说明如何声明类字段、构造函数和方法。 该示例还说明如何实例化对象及如何打印实例数据。 本例声明了两个类。 第一个类 Child 包含两个私有字段(name 和 age)、两个公共构造函数和一个公共方法。 第二个类 StringTest 用于包含 Main。

class Child
{
private int age;
private string name; // 无参数构造函数
public Child()
{
name = "N/A";
} // 带参数的构造函数
public Child(string name, int age)
{
this.name = name;
this.age = age;
} // Printing method:
public void PrintChild()
{
Console.WriteLine("{0}, {1} years old.", name, age);
}
} class StringTest
{
static void Main()
{
// Create objects by using the new operator:
Child child1 = new Child("Craig", 11);
Child child2 = new Child("Sally", 10); // Create an object using the default constructor:
Child child3 = new Child(); // Display results:
Console.Write("Child #1: ");
child1.PrintChild();
Console.Write("Child #2: ");
child2.PrintChild();
Console.Write("Child #3: ");
child3.PrintChild();
}
}
/* Output:
Child #1: Craig, 11 years old.
Child #2: Sally, 10 years old.
Child #3: N/A, 0 years old.
*/

2. 接口类型

格式为 interface I {...} 的用户定义类型
接口只包含方法、属性、事件或索引器的签名。 实现接口的类或结构必须实现接口定义中指定的接口成员。
实例:

interface ISampleInterface       //只定义声明
{
void SampleMethod();
} class ImplementationClass : ISampleInterface
{
// Explicit interface member implementation: (具体的方法实现在类中实现)
void ISampleInterface.SampleMethod()
{
// Method implementation.(方法代码)
} static void Main()
{
// Declare an interface instance.
ISampleInterface obj = new ImplementationClass(); // Call the member.
obj.SampleMethod();
}
}

3. 数组类型

一维和多维,例如 int[] 和 int[,]
可以将同一类型的多个变量存储在一个数组数据结构中。 通过指定数组的元素类型来声明数组。

class TestArraysClass
{
static void Main()
{
// Declare a single-dimensional array.
int[] array1 = new int[5]; // Declare and set array element values.
int[] array2 = new int[] { 1, 3, 5, 7, 9 }; // Alternative syntax.
int[] array3 = { 1, 2, 3, 4, 5, 6 }; // Declare a two dimensional array.
int[,] multiDimensionalArray1 = new int[2, 3]; // Declare and set array element values.
int[,] multiDimensionalArray2 = { { 1, 2, 3 }, { 4, 5, 6 } }; // Declare a jagged array.
int[][] jaggedArray = new int[6][]; // Set the values of the first array in the jagged array structure.
jaggedArray[0] = new int[4] { 1, 2, 3, 4 };
}
}

4. 委托类型

格式为 delegate int D(...) 的用户定义类型
具体参考:事件与委托学习笔记03

https://www.cnblogs.com/asahiLikka/p/11644393.html

类型和变量(C#学习笔记02)的更多相关文章

  1. JavaScript权威设计--JavaScript类型,值,变量(简要学习笔记三)

    1.负号是一元求反运算 如果直接给数字直接量前面添加负号可以得到他们的负值     2.JavaScript中的运算超出了最大能表示的值不会报错,会显示Infinity. 超出最小也不报错,会显示-I ...

  2. SaToken学习笔记-02

    SaToken学习笔记-02 如果排版有问题,请点击:传送门 常用的登录有关的方法 - StpUtil.logout() 作用为:当前会话注销登录 调用此方法,其实做了哪些操作呢,我们来一起看一下源码 ...

  3. Redis:学习笔记-02

    Redis:学习笔记-02 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 4. 事物 Redis 事务本 ...

  4. 软件测试之loadrunner学习笔记-02集合点

    loadrunner学习笔记-02集合点 集合点函数可以帮助我们生成有效可控的并发操作.虽然在Controller中多用户负载的Vuser是一起开始运行脚本的,但是由于计算机的串行处理机制,脚本的运行 ...

  5. 机器学习实战(Machine Learning in Action)学习笔记————02.k-邻近算法(KNN)

    机器学习实战(Machine Learning in Action)学习笔记————02.k-邻近算法(KNN) 关键字:邻近算法(kNN: k Nearest Neighbors).python.源 ...

  6. OpenCV 学习笔记 02 使用opencv处理图像

    1 不同色彩空间的转换 opencv 中有数百种关于不同色彩空间的转换方法,但常用的有三种色彩空间:灰度.BRG.HSV(Hue-Saturation-Value) 灰度 - 灰度色彩空间是通过去除彩 ...

  7. Python 3之str类型、string模块学习笔记

    Windows 10家庭中文版,Python 3.6.4, Python 3.7官文: Text Sequence Type — str string — Common string operatio ...

  8. [Golang学习笔记] 02 命令源码文件

    源码文件的三种类型: 命令源文件:可以直接运行的程序,可以不编译而使用命令“go run”启动.执行. 库源码文件 测试源码文件 面试题:命令源码文件的用途是什么,怎样编写它? 典型回答: 命令源码文 ...

  9. 《Master Bitcoin》学习笔记02——比特币的交易模型

    比特币的交易模型 模型基本描述 前面一篇学习笔记01提到了一个交易模型(第三章的内容),在第五章中,除了对这个模型做个详细介绍之外,其实和我上一篇理解的交易模型差不多,一个交易包含输入与输出,比特币是 ...

随机推荐

  1. Nginx 高级配置-第三方模块编译

    Nginx 高级配置-第三方模块编译 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 第三模块是对nginx 的功能扩展,第三方模块需要在编译安装Nginx 的时候使用参数--add ...

  2. Ubuntu16.04下Python2:pip安装opendr库

    在Ubuntu16.04/Python2环境安装opendr遇到了问题,并且报错不清楚. 使用dis_to_free的方法很好地解决问题. sudo apt install libosmesa6-de ...

  3. python中列表(list)函数及使用

    序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推. Python有6个序列的内置类型,但最常见的是列表和元组. 序列 ...

  4. AQS 抽象队列同步器(Abstract Queued Synchronizer) 知识点

    AQS的主要使用方式是继承,子类通过继承同步器并实现它的抽象方法来管理同步状态. AQS使用一个int类型的成员变量state来表示同步状态,当state>0时表示已经获取了锁,当state = ...

  5. AcWing 38. 二叉树的镜像

    习题地址 https://www.acwing.com/solution/acwing/content/2922/ 题目描述输入一个二叉树,将它变换为它的镜像. 样例 输入树: / \ / \ / \ ...

  6. C语言里面"具有外部链接的静态变量"这里的"链接"是什么意思

    首先从静态变量说起. C语言里面静态变量有三种: 分别是外部链接性,内部链接性和无链接性.声明外部链接的变量的方法是在代码块外面声明它. 此变量是全局变量,多文件中亦可用.声明内部链接的变量的方法是在 ...

  7. zzulioj - 2624: 小H的奇怪加法

    题目链接:http://acm.zzuli.edu.cn/problem.php?id=2624 题目描述 小H非常喜欢研究算法,尤其是各种加法.没错加法包含很多种,例如二进制中的全加,半加等.全加: ...

  8. 将HashMap转换为List

    背景 ​ SpringBoot中,使用@RquestBody注解 hashMap 接收多个参数的json字符串数据,包括一个数组和一个int值.数组中为一个个的对象组成. 问题 ​ 使用 map.ge ...

  9. Generating YouTube-like IDs in Postgres using PL/V8 and Hashids

    转自:https://blog.abevoelker.com/2017-01-03/generating-youtube-like-ids-in-postgres-using-plv8-and-has ...

  10. flask ORM创建

    安装SQLAlchemy pip3 install sqlalchemy Flask需要使用 flask-sqlalchemy 支持包 pip3 install flask-sqlalchemy 创建 ...