C# 复习笔记3

Posted iqyqqqqqq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 复习笔记3相关的知识,希望对你有一定的参考价值。

面向对象编程:类和对象(二)

  • 以对象为成员
  • 静态成员:描述类的整体特征的量可以用静态变量实现。静态变量在内存中只有一份,为类的所有对象共享。
  • C# 对象初始化
class test:IEquatable<test>
    
        public int aa  get; set; 
        public string bb  get; set; 
        public bool cc  get; set; 

        public string dd;

        public test(string dd) 
            this.dd = dd;
        

        public bool Equals(test other)
        
            return (this.aa == other.aa && this.bb == other.bb && this.cc == other.cc && this.dd == other.dd);
        
    
    class Program
    
        static void Main(string[] args)
        
            test a = new test("22")  aa = 1, bb = "11", cc = true, dd = "22" ;
            test b = new test("22")  aa = 1, bb = "11", cc = true, dd = "224" ;

            Console.WriteLine(a.Equals(b));

            ReadLine();
        
    
  • 常量成员
  • Circle.PI
    
  • readonly常量:对于const常量,所有对象都有相同的值,但对于readonly常量,每个对象可以有不同的值。我们把readonly常量初始化代码放在构造函数里,这样每一个对象创建时,就会有独立的值。
  •  public readonly int roomNumber;
    
  • 重载(Overload)
  • this关键字:四种用法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace AppConsole

 
    /// <summary>
    /// 普通用户
    /// </summary>
    public class User
    
        /// <summary>
        /// 全局变量
        /// </summary>
        Dictionary<string, object> dictInfo = null;
 
        /// <summary>
        /// 构造器
        /// </summary>
        public User()
        
            dictInfo = new Dictionary<string, object>();
        
 
        /// <summary>
        /// 构造函数重载
        /// </summary>
        /// <param name="UserID"></param>
        /// <param name="UserName"></param>
        public User(int UserID, string UserName)
        
            this.UserName = UserName;
            this.ID = UserID;
        
 
        /// <summary>
        /// this,第【1】种用法,索引器
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        public object this[string name]
        
            get  return dictInfo[name]; 
            set  dictInfo[name] = value; 
        
 
 
        /// <summary>
        /// 编号
        /// </summary>
        public int ID  get; set; 
 
 
        /// <summary>
        /// 用户名
        /// </summary>
        public string UserName  get; set; 
 
        /// <summary>
        /// this第【2】种用法,当做参数传递
        /// </summary>
        public void Said()
        
            new VIP().Say(this);
        
 
    
 
    /// <summary>
    /// 会员
    /// </summary>
    public class VIP : User
    
 
 
        /// <summary>
        /// 积分
        /// </summary>
        public int integral  get; set; 
 
        /// <summary>
        /// 构造函数
        /// </summary>
        public VIP()
        
            ID = 520;
            integral = 1000;
        
 
        /// <summary>
        /// this第【3】种用法,通过this()调用无参构造函数
        /// </summary>
        /// <param name="UserName"></param>
        public VIP(string UserName)
            : this()
        
            this.UserName = UserName;
        
 
        /// <summary>
        /// 构造函数重载
        /// </summary>
        /// <param name="UserID"></param>
        /// <param name="UserName"></param>
        public VIP(int UserID, string UserName)
            : base(UserID, UserName)
        
 
        
 
        /// <summary>
        ///Say方法
        /// </summary>
        /// <param name="user"></param>
        public void Say([LCQAttribute] User user)
        
            Console.WriteLine(string.Format("嗨,大家好!我的编号是0,大家可以叫我1!", user.ID, user.UserName));
        
 
    
 
    /// <summary>
    /// 静态类,来扩展User类
    /// </summary>
    public static class Helper
    
 
        /// <summary>
        /// 第【4】种用法: this扩展User类
        /// </summary>
        /// <param name="user"></param>
        public static void Sing(this User user)
        
            Console.WriteLine(string.Format("嗨,大家好!我的编号是0,大家可以叫我1!", user.ID, user.UserName));
        
    
 
    /// <summary>
    /// 特性类:指定特性仅适用于方法和方法的参数
    /// </summary>
    [System.AttributeUsage(AttributeTargets.Method | AttributeTargets.Parameter)]
    public class LCQAttribute : System.Attribute
    
 
    

  • 索引:索引可以让我们像数组那样访问类的数据成员。
  • 引用符

以对象为元素的数组

  • 声明以对象为元素的数组的方式和普通数组相同
  •  Cat[] cats = new Cat[5];
    
  • 但是这只是声明了一组“引用符”而已,并没有真正创建对象,下面的语句才具体创建对象,并让每个引用符指向一个对象。
for (int i = 0; i < cats.Length; i++)

	cat[i] = new Cat();

面向对象编程:继承

  • 继承(Inheritance)是软件重用的一种形式,采用这种形式,可以在现有类的基础上添加新的功能,从而创造出新的类。软件重用鼓励人们重用久经考验和调试的高质量软件,不但节省开发时间,而且提高软件质量。
  • protected成员:使得类的成员既保持封装性又可以在派生类中使用,那么可以把它定义为protected成员。
  • 虚方法的重写:在基类中,用关键字virtual声明虚方法;在派生类中,用关键字override重写基类的虚方法
  • 普通方法的隐藏:要想在派生类中修改基类的普通方法,需要用new关键字隐藏基类中的方法。
  • base关键字:如何在派生类中调用被重写或隐藏的基类方法呢?我们知道,每个对象都可以用this关键字引用自身的成员,同样,也可以用base关键字引用基类的成员。
  • 抽象类和抽象方法:
  • 密封类和密封方法:不能诶继承的类,sealed关键字声明
  • 派生类的构造函数

面向对象编程:多态性

  • 接口:接口用关键字interface定义,接口的名称习惯上以字母I开头。一般情况下,接口中只能包含成员的声明,不能有任何实现代码。接口的成员总是公有的,不需要也不能添加public修饰符,也不能声明为虚方法或静态方法。

以上是关于C# 复习笔记3的主要内容,如果未能解决你的问题,请参考以下文章

C# 复习笔记1

C# 复习笔记2

C#复习笔记--C#2:解决C#1的问题(进入快速通道的委托)

《信息与编码》考试复习笔记3----第三章无失真离散信源编码(重要)

《信息与编码》考试复习笔记3----第三章无失真离散信源编码补充例题

jQuery5~7章笔记 和 1~3章的复习笔记