C#语言基本元素

标记(Token)

关键字(Keyword)

  • 关键字是对编译器具有特殊意义的预定义保留标识符
  • 为了帮助编译器解释代码,C#中的某些单词具有特殊地址与含义,即关键字。
  • 关键字提供具体的语法,编译器根据其语法来解释程序员书写的表达式。

编译器利用关键字识别代码的结构与组织方式,因为编译器对这些单词有着严格的解释,开发人员只能按照C#的语言规则将关键字放在特定的位置。一旦程序员违反规则,编译器就会报错。


4933701-3b8386feb7754833.png
C#关键字

C#1.0之后没有引入任何新的保留关键字,后续版本中,一些构造使用了上下文关键字(contextual keyword),它们在特定位置才有意义。除了那些位置,上下文关键字没有任何意义。这样所有C#1.0代码都完全兼容后续版本。

4933701-43d81bdbcc0149e4.png
C#上下文关键字
  • 操作符(Operator)

标识符(Identifier)

C#使用标识符标识开发人员编写代码的构造。分配标识符之后,以后就能用它引用所标识的构造。因此,开发人员应分配有意义的名称,不要随意分配。

标识符有两种基本的大小写风格

  • CLI创建者的Pascal大小写(PascalCase),要求标识符每个单词的首字母大写。
  • camel大小写(camelCase),除了第一个字母小写,其他与pascal风格一样。

标识符规范

  • 注重标识符的清晰而不是简短
  • 不要再标识符名称中使用单词缩写
  • 不要使用不被广泛接受的首字母缩写词,即使被广泛接受非必要也不要使用。
  • 下划线虽然合法,但标识符一般不要包含下划线、连字号、非字母或数字。
  • C#不适用匈牙利命名法,即为名称附加类型缩写前缀。
  • 标点符号
  • 文本:字面值

算法

using System;

namespace TestApp
{
    class Calculator
    {
        /*使用递归运算*/
        public int SumFromOneToX(int number)
        {                     
            if(number == 1)
            {
                return 1;
            }
            else
            {
                int result = number + SumFromOneToX(number - 1);
                return result;
            }    
        }
    }
    class Program
    {           
        static void Main(string[] args)
        {
            //递归
            //var calculator = new Calculator();
            //int result = calculator.SumFromOneToX(100);

            //算法
            int number = 100;
            int result =  (1 + number) * number / 2;

            Console.WriteLine(result);
            Console.ReadKey();
        }
    }
}

类型

  • 什么是类型(Type)
  • 类型在C#语言中的作用
  • C#语言的类型系统
  • 变量、对象与内存

什么是类型

一个变量声明所指定的数据的类型称为数据类型,简称类型,是具有相似特征和行为的个体的分类。

类型(Type)又称为数据类型(DataType)

A data type is a homogeneous collection of values, effectively presented, equipped with a set of operations which manipulate these values.

  • 类型是数据在内存存储的型号
  • 小内存容纳大尺寸数据会丢失精确度,发生错误。
  • 大内存容纳小尺寸数据会导致浪费
  • 编程语言的数据类型与数据的数据类型不完全相同

强类型语言与弱类型语言的比较

  • C语言示例:IF条件
  • JS语言示例:动态类型
  • C#语言对弱类型/动态类型的模仿

类型在C#语言中的作用

C# 类型中所包含的信息

4933701-074dab33e101a278.png
整型类型存储
  • 存储此类型变量所需的内存空间大小
  • 此类型的值最大最小值范围
  • 此类型所包含的成员
  • 此类型由那个基类派生而来
  • 程序运行时,此类型的变量在分配在内存的什么位置。
// 打开性能监视器
$ perfmon
  • 此类型所允许的运算或操作

误区:引用类型保存在堆上,值类型保存在栈上

变量的值是在它声明的位置存储的,所以,假定一个类中有一个int类型的实例变量,那么在这个类的任何对象中,该变量的值总是和对象中的其他数据在一起,也就是在堆上。只有局部变量,即方法内部声明的变量和方法参数在栈上。对于C#2.0+,很多局部变量并不完全存放在栈上。

脆弱的栈内存

using System;
using System.Collections.Generic;
using System.Reflection;
using System.Text.RegularExpressions;

namespace TestApp
{         
    class BadKls
    {
        public void BadMethod()
        {
            int x = 100;
            this.BadMethod();
        }
    }
    class Program
    {   
        static void Main(string[] args)
        {
            BadKls kls = new BadKls();
            kls.BadMethod();//Error: System.StackOverflowException
        }
    }
}
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Text.RegularExpressions;

namespace TestApp
{         
    class Program
    {   
        static void Main(string[] args)
        {
            unsafe
            {
                //Process is terminating due to StackOverflowException.
                int* p = stackalloc int[999999];
            }
        }
    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值