第壹章第8节 C#和TS语言对比-类

类的用法,C#和TS非常相似,UTS和TS基本保持一致。实际开发中,C#的所有代码都必须在类中,而TS的客户端开发,则很少会用到class,主要使用type或interface,为什么?正文解释。

一、类和对象

1.1 C#中定义类和创建对象

//创建一个类,有两个属性成员Name和Age
class Person
{
   
   
    //***字段或属性如果没有初始化,框架自动赋默认值
    //其中数值类型为0,布尔为false,字符为'\0',其它引用类型为null
    public string Name {
   
    get; set; }
    public int Age {
   
    get; set; }
}

class Program
{
   
   
    static void Main()
    {
   
   
        // 实例化 Person 类,也叫创建对象
        Person person1 = new Person();
        person1.Name = "张三";
        person1.Age = 25;

        Console.WriteLine($"{person1.Name} 的年龄是 {person1.Age}");
    }
}

/*C#中new创建实例的过程
  1、分配内存空间来存储该对象
  2、字段或属性初始化,如果没有显式赋值,则赋值相应类型的默认值
  3、调用构造函数,如果有给字段或属性赋值,则会覆盖第2步的值
     如果没有显式创建构造函数,系统会自动创建一个无参数构造函数,如果有,则不会自动创建议
*/

1.2 TS/UTS中定义类和创建对象

class Person {
   
   
  
    //***TS不要求初始化,但UTS中要求必须初始化
    name: string;
    age: number = 0;
}

// 实例化 Person 类,也叫创建对象
let person1 = new Person();
person1.name = "张三";
person1.age = 25;

console.log(`${
     
     person1.name} 的年龄是 ${
     
     person1.age}`);


/*TS中new创建实例的过程
  1、创建一个空对象
  2、将这个对象的原型设置为类的原型对象(详见原型章节)
  3、执行类的构造函数,将新创建的对象作为 this 上下文,并在构造函数中进行属性初始化
     如果没有显式创建构造函数,系统会自动创建一个无参数构造函数,如果有,则不会自动创建议
*/

二、类的成员

2.1 C#的常量、字段、属性、方法和事件成员

2.1.1 类的可见修饰词
  • public: 可以被任何代码访问,建议都加public
  • internal: 只能在当前程序集内被访问,默认值
2.1.2 类的成员的可见修饰词
  • public: 可以被任何代码访问
  • protect internal:只能在类内部、派生类或当前程序保中被访问
  • internal: 只能在当前程序集内被访问
  • protect:只能在类的内部和派生类中被访问
  • private: 只能在类的内部被访问,默认值
2.1.3 类的实例成员和静态成员
  • 实例成员:类实例化后,才能访问和修改,数据保存在实例化后的对象中,正常创建的都是实例成员
  • 静态成员:直接通过类名访问和修改,数据保存在类型元数据中,使用static修饰。实际上类的实例也可以访问静态成员,静态成员是被所有实例共享的
2.1.4 类的成员代码示例
//1、类的成员定义====================================================================
//本例中还少两个成员,构造函数和索引器。构造函数下节重点说,索引器极少用到。
public class MyClass
{
   
   
    //1.1 常量字段(编译时)--------------------------------------------
    public const int MYCONST1 = 10; //常量,具有静态特征,类和实例都能访问,全大写
    public static const int MYCONST2 = 10; //静态常量,只能通过类访问,比较常用
  
  
    //1.2 常量字段(运行时),使用readonly,在下节构造函数中说明----------

  
    //1.3 字段---------------------------------------------------------
    private int _myField1 = 10; //私有的实例字段,初始化,_小驼峰
    public string myField2;  //公有的实例字段,未初始化,默认值为null,小驼峰 
    public static int myField3 = 20; //公有的静态字段,初始化

  
    //1.4 属性---------------------------------------------------------
    //实例属性,完整格式,属性一般都是public,习惯用大驼峰
    //属性本质上是方法,是对字段的封装,数据保存在后台字段上
    //读取和修改属性时,实际上是调用get和set方法,每次都会调用
    private int _myProperty1; //未初始化,默认值为0
    public int MyProperty1
    {
   
   
        get {
   
    return _myProperty; }
        set {
   
    _myProperty = value; }
    }
    
    public string MyProperty2 //简写方式①:方便写getter和setter语句
    {
   
   
        get => _myProperty2;
        set => _myProperty2 = value;
    } 
    public int MyProperty3{
   
    get;set } //简写方式②:最简化
    public int MyProperty4{
   
    get; } = 10 //简写方式③:只读属性,并初始化 
    public int MyProperty5 {
   
    get; priva
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值