C# 编程概述;类型,存储和变量; 类:基础;

本文介绍了C#编程的基础知识,包括标识符和关键字、输出文本的方法、注释、类型系统、变量、静态类型与动态类型、可空类型以及类的基本概念。内容涵盖命名空间、预定义类型、数据成员、函数成员、类的声明与成员访问修饰符等核心概念。
using System;			//命名空间System

namespace Simple		//声明一个新命名空间, 名称为Simple
{
    class Program		//声明一个类
    {
        static void Main()   		//声明一个名为Main的方法作为类Program的成员
        {
            Console.WriteLine("Hi, there!");   //使用命名空间System中的一个名称为Console的类打印
        }
    }
}

命名空间是一个和名称相关联的一组类型声明, 该程序使用两个命名空间, 创建了一个名称为Simple的新命名空间, 并在其之中声明了其类型(类Program); 还使用了一个名称为System的预定义空间

标识符和关键字

C#可以使用@作为且仅作为标识符的首位字符。
Pascal大小写建议用于类型名和成员名
Camel大小写建议用于本地变量和方法参数
全大写建议用于缩写词
成员字段要么以下划线开头, 要么以m_开头

从程序中输出文本

在System命名空间中, BCL提供了名称叫做Console的类, 包含了输入和输出数据到控制台窗口的方法

Write

Write是Console的成员, 可打印文本。

WriteLine

WriteLine会在每个输出字符串的结尾添加一个换行符。

格式字符串

Console.WriteLine("The value of var1 is {0} and {1}", var1, 3);

替代标记由数字和一对大括号组成, 里面的数字表示使用第几个替换值, 从0开始

多重标记和值

 Console.WriteLine("The value of var1 is {0} and {1} and {0}", var1, 3);

注释

单行注释和带分隔符注释与C相同

文档注释

使用三斜杠进行注释, 文档注释包含XML文本, 可以用来产生程序文档

/// <summary>
/// This class does...
/// </summary>
class Program
{
	........
}

C#程序是一组类型声明

C程序是一组函数和数据类型, C++是一组函数和类, C#是一组类型声明
命名空间是一种把相关的类型声明分组并命名的方法, 通常会把程序声明在命名空间内部。

类型是一种模板

可以把类型想象成一个用来创建数据结构的模板
类型由下面的元素定义:

  1. 名称
  2. 用于保存数据成员的数据结构
  3. 一些行为和约束条件

实例化类型

从某个类型模板创建的对象, 称为实例化该类型

数据成员和函数成员

成员分两种:数据成员和函数成员

预定义类型

C# 提供了16种预定义类型
sbyte: 8位有符号整数
byte: 8位无符号整数
short, ushort, int, uint, long, ulong, float, double, bool, char
decimal: 超高精度小数, 精度为小数点后28位
object: 所有其它类型的基类
string: 字符串
dynamic: 使用动态语言编写的程序集时使用

用户定义类型

class: 类类型
struct: 结构类型
array: 数组类型
enum: 枚举类型
delegate: 委托类型
interface: 接口类型

值类型和引用类型

值类型存在栈中
引用类型需要两段内存:

  1. 存储实际的数据, 总是位于堆中
  2. 是一个引用, 指向数据在堆中的存放位置

C#类型的分类

值类型: sbyte, byte, float, short, ushort, double, int, uint, char, long, ulong, decimal, bool, struct, enum
引用类型:object, string, dynamic, interface, delegate, array

变量

C# 提供了四种变量:

  1. 本地变量: 不是类型的成员, 在方法的作用域保存临时数据
  2. 字段: 是类型的成员, 保存和类型或类型实例相关的数据
  3. 参数: 用于从一个方法到另一个方法传递数据的临时变量
  4. 数组元素 是类型的成员, 由数据项构成的有序集合的一个成员

初始化

本地变量 不会自动初始化
类字段会自动初始化
结构字段会自动初始化
参数不会自动初始化
数组元素会自动初始化

静态类型和dynamic关键字

变量的类型在编译时确定且不能在运行时修改, 这叫做静态类型
IronPython和IronRuby之类的脚本语言是动态类型的, 且C#程序需要能够使用这些语言编写的程序集。
为解决该问题, dynamic关键字向编译器表示该变量是动态化的静态类型

可空类型

对于引用类型, 将变量设置为null即可
值类型的变量需要使用一个布尔指示器来和变量关联, 如果值有效, 则为true。

创建可空类型

int? myNInt = 28;

要检查可空类型是否包含值, 与null比较即可

if (myInt1 != null)
	Console.WriteLine("{0}", myInt1);

非可空类型和可空类型之间存在隐式转换
可空类型和非可空类型之间存在显示转换

int? myInt1 = 15;
int regInt = (int) myInt1;

为可空类型赋值

可以赋予可空类型与其底层相同的值, 相同可空类型的值, null

int? myI1, myI2, myI3;

myI1 = 28;
myI2 = myI1;
myI3 = null;
Console.WriteLine("myI1: {0}, myI2: {1}", myI1, myI2);

类:基础

类的概述

类是一种活动的数据结构
程序的数据和功能被组织为逻辑上相关的数据项和函数的封装集合, 称之为类。
类是一个能储存数据并执行代码的数据结构
包含如下内容:
数据成员:储存与类或类的实例相关的数据, 数据成员通常模拟该类所表示的现实世界事物的特性。
函数成员: 执行代码。函数成员通常模拟类所表示的现实世界事物的功能和操作。

声明类

class MyExcellentClass
{
	//成员声明
}

类成员

字段

字段可以是任何类型
声明方式如下:

Type Identifier;
class MyClass
{
	int myField;
}

C#不能声明全局变量, 所有的字段都属于类型, 而且必须在类型声明内部进行声明。

显式和隐式字段初始化

如果没有初始化语句, 则每种类型的默认值都是0。

方法

方法是具有名称的可执行代码块, 同样还有匿名方法。
当方法被调用(call或invoke)时, 其执行自己所含的代码, 方法相当于C++中的成员函数

class SimpleClass
{
	void PrintNums()
	{
		Console.WriteLine("1");
		Console.WriteLine("2");
	}
}

为数据分配内存

声明类类型的变量需要为实际数据分配内存, 需要使用new运算符。
new依据类型的不同从栈或堆中分配

new TypeName()
Dealer theDealer = new Dealer();

实例成员

实例成员: 类的每个实例都是不同的实体, 它们有自己的一组数据成员, 因为这些数据成员都和类的实例相关, 故被称为实例成员
静态成员: 实例成员是默认类型, 但也可以声明与类而不是与实例相关的成员, 称之为静态成员

访问修饰符

共有5种访问修饰符:

  1. private(私有的)
  2. public (公有的)
  3. protected(受保护的)
  4. internal(内部的)
  5. 受保护内部的(protected internal)

私有访问和公有访问

私有成员只能从声明它的内部进行访问, 其他的类不可看见或访问
私有访问是默认的访问级别

	int MyInt1;
private int MyInt2;

公有对象可以被程序中的其他对象访问, 使用public来声明

public int MyInt;

从类的内部访问成员

class DaysTemp
{
	private int High = 75;
	private int Low = 45;
	//方法
	private int GetHigh()
	{
		return High;
	}
	private int GetLow()
	{
		return Low;
	}
	public float Average()
	{
		return (GetHigh() + GetLow()) / 2;
	}
}

从类的外部访问成员

class DaysTemp
{
	public int High = 75;
	public int Low = 45;
}

class Program
{
	static void Main()
	{
		DaysTemp temp = new DaysTemp();
		temp.High = 85;
		temp.Low = 60;
		Console.WriteLine("High:	{0}", temp.High);
		Console.WriteLine("Low:		{0}", temp.Low);
	}
}

综合应用

using System;

class DaysTemp
{
    public int High, Low;
    public int Average()
    {
        return (High + Low) / 2;
    }
}

class Program
{
    static void Main()
    {
        DaysTemp t1 = new DaysTemp();
        DaysTemp t2 = new DaysTemp();

        //字段赋值
        t1.High = 76;   t1.Low = 57;
        t2.High = 75;   t2.Low = 53;

        //读取字段值
        //调用实例的方法
        Console.WriteLine("t1: {0}, {1}, {2}",
            t1.High, t1.Low, t1.Average());
        Console.WriteLine("t2: {0}, {1}, {2}",
            t2.High, t2.Low, t2.Average());
    }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值