/// <summary>
/// 第七章:创建并管理类和对象
/// </summary>
namespace Chapter7
{
class Program
{
public static int Num = 0;//7.6.1创建共享字段
public const double PI = 3.1415926;//7.6.2使用const关键字创建静态字段,只有数值类型、字符串、枚举才可以声明
static void Main(string[] args)
{
//7.1理解分类
//7.2封装的目的
/*
* 封装:信息隐藏
* 1.将方法和数据合并到类中,也就是为了支持分类
* 2.控制对方法和数据的访问,也就是为了控制类的使用
*/
//7.3定义并使用类
Mouble.Class1 class1 = new Mouble.Class1();
//7.4控制可访问性(private、public)
//7.5使用构造器
(int xVal, int yVal) = class1;
//7.6理解静态方法和数据
/*
* 静态方法不依赖类的实例,不能在其中访问类的任何实例字段或实例方法。相反,只能访问标记为static的其他方法和字段
*/
//7.6.3理解静态类
/*
* 静态类只能包含静态成员(使用该类创建的所有对象都共享这些成员的单一拷贝)
* 静态类纯粹作为工具方法和字段的容器使用
* 静态类不能包含任何实例数据或方法
* new操作符创建静态类的对象没有意义,编译器也会报错
* 允许包含一个默认构造器(静态)
*/
//7.6.4静态using语句
//using static System.Math;慎用!
//7.7匿名类
/*
* 匿名类没有名字的类
*/
var myAnonymousObject = new { Name = "John",Age = 47 };
Console.WriteLine($"Name:{myAnonymousObject.Name}Age:{myAnonymousObject.Age}");
/*
* 匿名类虽然好用,但内容存在着相当多的限制。匿名类只能包含公共字段,字段必须初始化,不能是静态,而且不能定义任何方法。
*/
}
}
}
class Class1
{
private int x, y;
public Class1()//7.5默认构造器
{
}
Class1(int num)//7.5.1重载构造器
{
}
//7.5.2解构对象
/*
* 必须命名为Deconstruct
* 必须是void方法
* 必须获取一个或多个参数。这些参数用对象中的字段的值填充
* 参数用out修饰符加以标志。意味着如果向其赋值,这些值会传回调用者。
* 方法主体代码向参数赋值
*/
public void Deconstruct(out int x,out int y)
{
x = this.x;
y = this.y;
}
}