注:会C语言学C#语法会容易很多,很多都是相通的,这本书讲的挺通俗易懂的,适合初学者
2. C#编程描述
2.7.3 格式化字符串
2.7.5 格式化数字字符串
3. 类型、存储和变量
3.6 定义类型
class Myclass//用户自定义类型:先声明它
{
statement;
statement;
}
Myclass mc=new Myclass;//再实例化它,才能用
3.7 栈和堆
程序运行中,他的数据必须存储在内存中。运行中的程序使用两个内存区域来存储数据:栈和堆
栈:后进先出
堆:可以以任意顺序存入和移除
3.8 值类型和引用类型
值类型直接存储其值,而引用类型存储对其值的引用。
4.类的基本概念
4.3 声明类
类是一种活动的数据结构
4.4 类成员
字段和方法试最主要的类成员类型。字段是数据成员,方法是函数成员。
4.6 为数据分配内存
4.8 访问修饰符
下面是字段和方法声明的语法:
5种成员访问控制如下:
- 私有的(private)
- 公有的(public)
- 受保护的(protected)
- 内部的(internal)
- 受保护内部的(protected internal)
默认为私有访问
4.9 从类的内部访问成员
4.10 从类的外部访问成员
要从类的外部访问实例成员,必须包括变量名称和成员名称,中间用句点(.)分隔。
5. 方法
5.3 本地变量
var关键字并不是特定类型变量的符号,表示任何可以从初始化语句的右边推断出的类型。
本地变量即局部变量,static
5.6 方法调用
什么时候用【类名.方法】
两种方法调用类中的函数:https://www.cnblogs.com/kevinl/p/13264128.html
-
方法在Program中,静态成员可以直接调用函数,不需要【类名.方法】后才能调用
namespace Exp04_1
{
class Program
{
//方法在Program中,且为静态成员
static double digui(int n)
{
}
static void Main(string[] args)
{
double sum = 0;
int sjs;
Console.WriteLine("输入一个整数,求这个数前面所有数阶层的和");
sjs = Convert.ToInt32(Console.ReadLine());
for (int i = 1; i <= sjs; i++)
{
sum = sum + digui(i);//方法在Program中,静态成员可以直接调用函数,不需要【类名.方法】后才能调用
}
}
}
}
2.方法在自己创建的类myc中,实例成员要实例化对象【对象.方法】之后才能调用
namespace Exp04_1
{
//方法在自己创建的类myc中,且为实例成员
class myc
{
public double digui(int n)
{
}
}
class Program
{
static void Main(string[] args)
{
double sum = 0;
int sjs;
Console.WriteLine("输入一个整数,求这个数前面所有数阶层的和");
sjs = Convert.ToInt32(Console.ReadLine());
myc sj = new myc();
for (int i = 1; i <= sjs; i++)
{
sum = sum + sj.digui(i);//方法在自己创建的类myc中,实例成员要实例化对象【对象.方法】之后才能调用
}
}
}
}
3.书上示例
class Myclass
{
void PrintDateAndTime() //声明方法
{
DateTime dt=DateTime.Now();
}
static void Main()
{
Myclass mc=new Myclass();
mc.PrintDateAndTime(); //调用方法
}
}
5.7 返回值
可返回用户定义类型的对象
5.10值参数——5.12引用参数作为值参数和引用参数:
该链接和书本内容一致,但排版清晰,利于阅读https://www.cnblogs.com/liuyoung/p/7819052.html
5.13 输出参数
- 必须在声明和调用中都使用修饰符,输出参数的修饰符是out而不是ref
- 和引用参数类似,但是如果方法中有任何执行路径试图在输出参数被方法赋值前读取它,会报错
5.14 参数数组
- 在数据类型前使用params修饰符
- 在数据类型后放置一组空的方括号
5.15 参数类型总结
6. 深入理解类
6.3 实例类成员
改变一个实例字段不会影响任何其他实例中成员的值
6.4 静态字段
示例:
6.8 成员常量
与C和C++不同。在C#中没有全局常量,每个常量必须声明在类型内。
常量成员表现的像一个静态量,但不能将常量声明为static
6.10 属性
属性和字段类似,有如下特征:
- 它是命名的类成员
- 它有类型
- 它可以被赋值和读取
和字段不同的是,属性是一个函数成员
- 它不为数据存储分配内存
- 它执行代码
属性是指定的一组两个匹配的、称为访问器的方法。
- set访问器为属性赋值
- get访问器从属性获取值
6.13 对象初始化
6.15 readonly修饰符
const字段只能在字段的声明语句中初始化,而readonly字段可以在下列任意位置设置它的值
- 字段声明语句,类型const
- 类的任何构造函数
const字段值必须在编译时决定,而readonly字段的值可以在运行时决定
6.16 this关键字
this关键字在类中使用,是对当前实例的引用。它只能被用在下列类成员的代码块中。
- 实例构造函数
- 实例方法
- 属性和索引器的实例访问器
不能在任何静态函数成员的代码中使用this关键字
6.17 索引器
是一组get和set访问器,索引器总是实例成员,因此不能声明为static
7.1 类继承
当创建一个类时,程序员不需要完全重新编写新的数据成员和成员函数,只需要设计一个新的类,继承了已有的类的成员即可。这个已有的类被称为的基类,这个新的类被称为派生类。
7.2 访问继承的成员
代码显示OtherClass的所有4个成员都能被无缝访问,无论他们在基类中声明还是在派生类中声明
7.4 屏蔽基类的成员
虽然派生类不能删除它继承的任何成员,但可以用与基类成员名称相同的成员来屏蔽基类成员
7.5 基类访问
如果派生类必须完全的访问被隐藏的继承成员,可以使用基类访问表达式访问隐藏的继承成员
基类访问表达式有关键字base后面跟一个点和成员的名称组成。
上述代码用base.Field1,则打印出基类Field1