zoukankan      html  css  js  c++  java
  • 第六章 管理类型(In .net4.5) 之 创建类型

    1. 概述

      本章内容包括 C#5中如何更好的创建类型以及如何扩展现有类型。

    2. 主要内容

      2.1 如何选择类型

        C#类型系统包括三种类型:值类型引用类型指针类型。(指针类型用于非托管代码,很少使用。)

        ① 创建枚举类型(enums)

          合理使用枚举类型 可以提高代码的可读性和可维护性。

        ② 值类型 还是 引用类型

          使用值类型的三个推荐的原则:

          a. 对象的体积小.  b. 对象逻辑上不可变.  c. 使用中会生成很多对象. 

          * 结构类型(struct) 不能自己定义空构造器,不适用继承系统。

      2.2  完善类型体

        ① C# 命名参数、可选参数 和 方法重载

          命名参数用于给制定的参数传值,可选参数用于给指定的参数设置默认值。

    void MyMethod(int firstArg, string secondArg = "default value",  bool thirdArg = false) { }
    
    void CallingMethod()
    {
        MyMethod(1, thirdArg: true);
    }

        ② 使用索引器,可以实现以集合的方式访问对象成员。

    class Cards {}
    
    public Card this[int index]
    {
        get { return Cards.ElementAt(index); }
    }

        ③ 使用 蓝图(blueprint)

          定义构造函数的几个原则:

          a. 如果需要的话,显示指定public访问控制符。

          b. 参数尽可能少。

          c. 将参数映射到字段(field)。

          d. 在合适的地方抛出异常。

          e. 构造函数中不要调用虚方法。

      2.3 如何设计类型

        ① 核心思想:高内聚,低耦合。

        ② SOLID设计原则:Single responsibility(S), Open/close(O), Liskov substitution(L), Interface segregation(I),

          Dependency Inversion(D). 

        ③ 使用泛型类型(generic types)

          使用where关键字限制泛型可用范围,可以限制的类型包括:struct, class, new() 以及具体的类型及接口。

          使用default可以指定默认值。default(T)

      2.4 扩展现有类型

        C#提供了几种方法来扩展现有类型。本节介绍两个: 扩展方法 和 方法重写(overriding).

        ① 扩展方法 是在C#4.0引入的,需要定义在 非泛型、非嵌套、静态类中。

    pubic class Product
    {
        public decimal Price { get; set; }
    }
    
    public static class MyExtensions
    {
        public static decimal DisCount(this Product product)
        {
            return product.Price * .9M;
        }
    }
    
    public class Calculator
    {
        public Decimal CalculateDisCount(Product p)
        {
            return p.DisCount();
        }
    }

          *扩展方法不仅可用在类、结构上,还可以用在接口上。LINQ是用在接口上的一个例子。

        ② 重写虚方法 也可以实现对现有代码的扩展。

    class Base
    {
        public virtual int MyMethod()
        {
            return 42;
        }
    }
    
    class Derived : Base
    {
        public override int MyMethod()
        {
            return  base.MyMethod() * 2;
        }
    }

    3. 总结

      ① 一个类型中可以包括:构造器、方法、属性、字段 和 索引器。

      ② 创建和调用方法时,可以使用 可选参数 和 命名参数。

      ③ 可以用扩展方法向现有类型增加功能。

      ④ 使用方法重写,可以在子类中重定义父类的相应功能。

  • 相关阅读:
    Android IOS WebRTC 音视频开发总结(五十)-- 技术服务如何定价?
    Android IOS WebRTC 音视频开发总结(四九)-- ffmpeg介绍
    Android IOS WebRTC 音视频开发总结(四八)-- 从商业和技术的角度看视频行业的机会
    Android IOS WebRTC 音视频开发总结(四七)-- 深度解读国内首届WebRTC大会背后的真相
    小程序缓存二开(带有效时间)
    小程序笔记五:页面数据传递
    小程序笔记四:表单提交form
    小程序笔记三:幻灯片swiper 和图片自定义高度
    小程序笔记二:部署
    小程序笔记一:基础设置
  • 原文地址:https://www.cnblogs.com/stone_lv/p/4359915.html
Copyright © 2011-2022 走看看