C#学习(2)---数据类型与变量(部分)

一、
上次学习学到了方法。接下来看看一个调用方法的例子:计算一到x的和。
分别使用递归和迭代两种,还引入了静态成员与实例成员引用的不同。

//使用迭代和实例成员
namespace ConsoleAppPractice
{
    class Program
    {
        static void Main(string[] args)
        {
            SumNumber result = new SumNumber();
            Console.WriteLine(result.Sum(100));
        }
    }
    class SumNumber
    {
        public int Sum(int x)
        {
            int sum = 0;
            for (int i = 0; i <= x; i++)
            {
                sum += i;
            }
            return sum;
        }
    }
}
//使用递归和静态成员
class Program
    {
        static void Main(string[] args)Console.WriteLine(SumNumber.Sum(100));
        }
    }
    class SumNumber
    {
        public static int Sum(int x)
        {
            if (x==1)
            {
                return 1;
            }
            else
            {
                int result = x + Sum(x - 1);
                return result;
            }
        }
    }

二、类型的概念
类型又名数据类型,对数值存储、数值的调用有很大作用,同时每个类型都配备有各自许多独特的方法。
编程语言可分为强类型语言和弱类型语言。
如JavaScript就是一种弱类型。
C#是一种强类型语言。
比如,若short b=20;int a=b;不会报错。但是如果把L赋值给int就会报错。
再比如,C#有bool类型,bool的值只能是true或者false。bool = 1或者int a = (1>10)这两个式子编译器都会报错。
但是C#也提供了一种弱类型叫作dynamic。

dynamic a = 20;
            Console.WriteLine(a);
            a = "hello!";
            Console.WriteLine(a);
    //运行结果:20\nhello!

三、类型的作用
一个类型包含有许多信息:
1.储存此类型所需的内存空间大小。
2.最大最小值范围
3.此类型包含的成员(方法、属性、事件等)
用处有静态和动态两方面。此处的静态与动态指的是整个程序。
这里的静态指的是程序编辑或编译的过程,动态指的是运行的过程。
4.此类型由何基派衍生
5.此类型允许什么操作
6.运行时,此类型分配在内存的什么位置
此处引入堆与栈的概念
内存空间可分为堆与栈这两种。
栈很小很快(可能只有几M),是用来给方法调用时使用的。如果方法调用太多或者栈溢出(StackOverflow)会爆掉。
堆很大(可能有几个G?), 是用来储存对象实例的。忘了回收对象,内存会浪费(学名内存泄漏)。但是C#会帮你找到合适的时机释放内存,不用手动释放,相对比较安全。

//让栈爆掉的代码:
namespace ConsoleAppPractice
{
    class Program
    {
        static void Main(string[] args)
        {
            BadGuy bg = new BadGuy();
            bg.BadMethod();

        }
    }
    class BadGuy
    {
        public void BadMethod()
        {
            this.BadMethod();
        }
    }
}
//使用windows+r键,输入perfmon打开观测窗,观察堆的变化

四、C#语言的类型系统
定义数据类型需要用class、enum、strcuct等关键字(具体见下图)。但是有很多现成的数据类型。我们一般用现成的。这两个要注意分清
五大数据类型:
1.类(Classes) 如Windows,Form,Console,String
如果类太常用,会被吸收为关键字。

//证明一个东西是不是类的两种方法:
static void Main(string[] args)
        {
            Type myType = typeof(Form);
            Console.WriteLine(myType.FullName);
            Console.WriteLine(myType.IsClass);
        }
  //或者可以右键,然后点击go to definition

2.结构体(Structures) 如Int32,Int64,Char,Single,Double

3.枚举(Enumerations)

//用于将window弹出来就最大化。
static void Main(string[] args)
        {
            Form f = new Form();
            f.WindowState = FormWindowState.Maximized;//此处有三个选项:maximized,normal,minimized。说明是枚举类型。
            f.ShowDialog();
        }
//该枚举类型内部的定义
    public enum FormWindowState
    {
        Normal = 0,
        Minimized = 1,
        Maximized = 2
    }

4.接口(Interfaces)
5.委托(Delegates)
在这里插入图片描述
在这里插入图片描述

五、变量
1.变量的定义
变量=以变量名所对应的内存地址为起点,以其数据类型所要求的存储空间为长度的一块内存区域
2.变量的功能
(1)存储数值
(2)变量名所对应的位置就是这个变量的值在内存中所对应的位置
(3)每个变量都有一个类型,决定了什么样的数据能够存进去
3.变量的种类
七种:静态变量,实例变量(成员变量,字段),数组元素,值参数,引用参数,输出形参,局部变量
一般叫变量就是指局部变量
局部变量就是方法(函数体)里声明的变量。注,在类中声明的变量可不是局部变量,一定是在方法中

namespace ConsoleAppPractice
{
    class Program
    {
        static void Main(string[] args)
        {

            Console.WriteLine(哈哈.amount);
            //静态成员可以直接用类名访问
            哈哈 c = new 哈哈();
            c.a = 1;
            //实例成员需引用变量后才能访问。
            Console.WriteLine(c.str);
            Console.WriteLine(c.a);
        }
    }
    class 哈哈
    {
        public int a = 0;
        public static int amount = 1;
        public string str = "haha";
    }
    
}

注意,此处这坨public很像类的属性,但是这不安全,故演化为更加安全的属性,保护字段。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值