C# 核心基础一

静态方法与非静态方法的区别
1、修饰:静态方法用static修饰,非静态方法则不用
2、所有性:静态方法属于类所有,无论创建了多少个实例,都只占一块存储区域,相当于是只运行一次。
   非静态方法属于类的实例所有,每创建一个实例,就分配一块存储区域。
3、主动访问性:静态方法只能访问类中的静态成员,而非静态方法可以访问类中的任何成员
4、被动访问性:静态方法的访问通过:类名.静态方法名()的格式;
    非静态方法的访问通过:类实例名.非静态方法名()的格式访问。
5、生命周期:静态方法从生成时开始到整个程序运行结束;
    非静态方法从生成时开始到生成它的程序段结束。
6、继承性:静态方法不能被继承,而非静态方法可以。
============================静态 static 不能被继承和实例化,即:静态和继承(多态)本身就是相反的===========================
静态类与非静态类的区别
1、包含成员:静态类仅包含静态成员,而非静态类可以包含静态和非静态成员;
2、实例化与继承:静态类不能被实例化,不能被继承,而非静态类可以被实例化和继承;
3、构造方法:静态类不能包含构造方法,但仍可声明静态构造方法来初始化;非静态类有默认的构造方法;

多态:通过继承实现不同对象调用相同方法时,表现出不同的行为
 -->在代码中实现多态就是:
  -->根据条件创建子类对象,统一赋值给父类对象
  -->由父类对象统一调用方法,子类是什么方法就执行什么方法
 
==============================================================================================================================
 
继承-->: new(隐藏基类成员) virtual(虚方法) abstruct(抽象基类方法) override(重写) interface(接口) base(子类构造方法访问父类构造方法)
继承:是重用现有类去创建新类的过程
 -->派生类的实例由基类的实例加上派生类的附加成员组成
抽象类:包含至少一个未实现的方法的类。
 -->抽象类就是为了多态而存在,不能被实例化,继承它的类必须实现其抽象方法。
 -->抽象方法只能定义在抽象类中
 -->public abstract void SayHi();无大括号
 -->抽象就是为了重写
 -->抽象类及其中所有成员必须是public
接口:一系列抽象成员的集合。
 -->接口可由抽象的方法、属性、事件、索引器构成。接口不能包含字段;
 -->接口不能包含任何实现了的方法;
 -->接口的每种方法必须在派生类中实现;
 -->接口中的成员不能加“访问修饰符”(默认为public)
 -->若要实现接口成员,类中的对应成员必须是公共的、非静态的
 -->显式实现接口,用接口名.方法名 标注方法, 然后去掉public
        void IFunc1able.Func()
        {
            Console.WriteLine("我是第一个接口的方法");
        }
 -->一般用大写 I + 动词 + able 的形式命名
抽象类和接口的区别:
 -->接口不能加任何修饰符,而抽象类及其中所有成员必须定义为public
 -->接口中只能包含非实现的方法、属性、事件、索引器。而抽象类还可包含字段等成员
 
类:是具有相同属性和功能的对象的抽象集合
 --> public 写在类前面,表示其它项目也能使用
 --> 没有加就表示为internal,只在本项目中使用

简单工厂模式:
 -->根据提供给它的数据,返回几个可能类中的一个类的实例;
 -->通常它返回的类都有一个共同的父类和共同的方法;
 -->但每个方法执行的任务不同,而且根据不同的数据进行了优化。
 
is - as:类型判断:看一个对象是不是某个类型或能否转为父类型
 -->is就是处于对类型的判断。能转返回true,不能转就返回false。
  if(对象 is 类型)
 -->as操作符的工作方式与强制类型转换一样,不能转换就返回null:
  Object obj=new Object();
  ClassA a= obj  as ClassA;//不能转就返回null

======================================Person中的集合(===非泛型===)操作==================================
排序Sort([参数])  
 -->所有的排序都实现IComparable(实例,无参)接口,IComparer(对象,有参)接口//这里的实例与对象只是个人为了便于区分而做的定义
         ArrayList list = new ArrayList();
            list.Add(new Person("张三", 19, '男'));
            list.Add(new Person("李四", 31, '男'));
            list.Add(new Person("王五", 30, '男'));
 -->Sort()无参时,Person实现IComparable接口(实例)
        public int CompareTo(object obj)
        {
            Person p = obj as Person;
            return string.Compare(this.Name,p.Name);
        }
 -->Sort(new OrderByAge())有参时,OrderByAge()实现IComparer接口(对象)
     class OrderByAge:IComparer
  {
   public int Compare(object x, object y)
   {
    int a = (x as Person).Age;
    int b = (y as Person).Age;
    return a - b;
   }
  }
在ArrayList集合中查找、匹配Person
 --> 在Person中重写Equals()方法(实例)
        public override bool Equals(object obj)
        {
            Person p = obj as Person;
            if (p == null)
            {
                return false;
            }
            return ReferenceEquals(p, this) || //ReferenceEquals 引用,判断是否是相同实例
                this.Name == p.Name && this.Age == p.Age && this.Sex == p.Sex;
        }
 --> class Program中
   bool isContains = list.Contains(new Person("张三", 19, '男'));
         int index = list.IndexOf(new Person("张三", 19, '男'));
=================================================================================================================
利用循环打印集合

foreach()原理
    --> 1)入集合,调用GetEnumerator方法,得到IEnumerator枚举器
    --> 2)进入in,调用MoveNext方法,看是否进行循环
    --> 3)通过Current属性取得当前值
 -----
 -->IEnumerator:公开枚举器,该枚举器支持在非泛型集合上进行简单迭代。
 -->DictionaryEntry:定义可设置或检索的字典键/值对。
 -->Current:获取集合中的当前元素。
 -->MoveNext():将枚举数推进到集合的下一个元素。
 -->GetEnumerator():返回一个循环访问集合的枚举器。
 
            Hashtable ht = new Hashtable();
            ht.Add("张三", "张三1");
            ht.Add("李四", "李四1");
            ht.Add("王五", "王五1");

            IEnumerator ie = ht.GetEnumerator();
            while (ie.MoveNext())
            {
                object o = ie.Current;
                DictionaryEntry de = (DictionaryEntry)o;
                Console.WriteLine(de.Key + "," + de.Value);
            }
            Console.ReadKey();

=================================================================================================================
文件流(I/O)
Path类:
 --> GetFileName 获取文件名
 --> GetFileNameWithoutExtension 获取文件名(无扩展名)
 --> GetExtension 返回文件扩展名
 --> GetDirectoryName 获取文件完整路径(无文件名)
 --> GetFullPath 获取文件的绝对路径(有文件名)
 --> GetPathRoot 获取文件根目录信息(盘符)
 --> IsPathRooted 判断路径是绝对路径还是相对路径
 --> HasExtension 判断路径是否包括文件名(可用于判断是文件还是目录)
 --> Combine(str1,str2) 将字符串拼接为路径
 --> ChangeExtension(fileName,扩展名) 更改扩展名
 --> GetTempFileName 返回临时文件目录
字节操作
            using (FileStream fs1 = new FileStream(@"F:\123.txt", FileMode.Open, FileAccess.Read))
            {
                using (FileStream fs2 = new FileStream(@"F:\369.txt", FileMode.Create, FileAccess.Write))
                {
                    int i = -1;
                    while ((i = fs1.ReadByte())!=-1)
                    {
                        fs2.WriteByte((byte)i);
                    }
     ///
     int count = 0;
                    byte[] bs = new byte[4];
                    while ((count = fs1.Read(bs,0,bs.Length))>0)
                    {
                        for (int i = 0; i < count; i++)
                        {
                            Console.WriteLine("{0}",(char)bs[i]);
                        }
                    }
                }
            }

 

 

Shift + Alt + F10     引用命名空间;实现抽象(方法,属性…)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值