zoukankan      html  css  js  c++  java
  • c#学习随笔

      1 using System;                       //导入命名空间system中的类
      2 using System.Collections.Generic;   //导入System.Collections.Generic中的类
      3 using System.Linq;
      4 using System.Text;
      5 using System.Threading.Tasks;     
      6 //using 导入命名空间  
      7 //使用微软提供的命名空间,使用里面的类
      8 
      9 
     10 
     11 
     12 
     13 
     14 
     15 
     16 
     17 namespace CShapeDemo    //命名空间CShapeDemo 包含了Program 等若干个类
     18 {
     19 
     20 
     21     //接口类
     22     interface ICatchMice
     23     {
     24         void CatchMice();//默认是public ,且不能被private protected限定
     25     }
     26 
     27     interface IClimbTree
     28     {
     29         void ClimbTree();
     30     }
     31 
     32 
     33    abstract public class Pet                                    //父类,当包含abstract时,类也要定义成abstract类
     34     {
     35         //构造函数
     36         public Pet()
     37         {
     38         }
     39 
     40         public Pet(string tempName)
     41         {
     42             this.name = tempName;
     43         }
     44 
     45 
     46         //行为
     47         public void printname()
     48         {
     49             Console.WriteLine("Pet's name is " + name);
     50         }
     51 
     52         //重载
     53         virtual public void Speek() //父类的虚函数
     54         {
     55             Console.WriteLine("Pet is Speaking !");
     56         }
     57 
     58         abstract public void Speek2();//抽象方法
     59 
     60 
     61         //非静态数据
     62         protected string name;
     63 
     64     }
     65 
     66 
     67     public class Dog : Pet,ICatchMice,IClimbTree            //子类只能继承1个基类,但是可以继承多个接口类
     68     {
     69         //构造函数
     70         public Dog(string name) : base(name)                // base(name)   是基类的构造函数... 根据参数的类型和个数可以选择不同的父类构造函数
     71         {
     72             Num++;//静态计数器
     73         }
     74 
     75         new public void printname()                         //new 表示子类的这个函数和父类的函数重名,是个签名函数...有没有new都可以实现隐藏...最好是加上new
     76         {
     77             Console.WriteLine("宠物的 name is " + name);
     78         }
     79         //静态构造函数 :只负责初始化静态成员的数据
     80         static Dog()                                        //静态构造函数不能加public
     81         {
     82             Num = 0;
     83         }
     84         //静态函数
     85         static public void ShowAllDogNum()
     86         {
     87             Console.WriteLine("一共创建了{0}个狗", Num);
     88         }
     89 
     90 
     91 
     92         //重写                                               //多态会重写,实现子类的差异化
     93         public override void Speek()                        // public override   和 override public 是同一个意思 就像 const int 一样
     94         {
     95            // base.Speek();
     96             Console.WriteLine("狗叫");
     97         }
     98 
     99         //抽象方法
    100        sealed public override void Speek2()                       //抽象方法在子类必须用override关键字实现,实现差异化
    101         {
    102             Console.WriteLine("狗子在叫呢");                       //sealed关键字表示该方法被继承的时候,也不允许Dog的子类重写它
    103         }
    104 
    105 
    106         //接口类的方法必须要实现,且 用public修饰
    107         public void CatchMice()
    108        {
    109            Console.WriteLine("老子是狗,不会捉老鼠的");
    110        }
    111         public void ClimbTree()
    112         {
    113             Console.WriteLine("老子是狗,也不会爬树呀");
    114         }
    115 
    116 
    117 
    118         //静态数据
    119         static int Num;
    120 
    121 
    122         //自定义转换
    123         public static implicit operator Cat(Dog dog)                    //public static implicit operator 特定写法,隐式转换
    124         {
    125             //把狗转换成了猫了
    126 
    127             return new Cat(dog.name);
    128         }
    129 
    130 
    131         //委托
    132         public void WagTail()
    133         {
    134             Console.WriteLine("狗狗摇尾巴");
    135         }
    136     }
    137 
    138     public class Labrador : Dog
    139     {
    140         public Labrador(string name) : base(name)
    141         {
    142 
    143         }
    144 
    145     }
    146 
    147 
    148     //扩展类
    149     static class PetGuide
    150     {
    151         //this+类名A 大概就是 这个函数就像A里面的方法一样,这就是扩展类的含义咯
    152         static public void HowToFeedDog(this Dog dog)               // this+ 类名的写法  :特定写法
    153         {
    154             Console.WriteLine("-------------------");
    155         }
    156     }
    157 
    158     public class Cat : Pet
    159     {
    160         override public void Speek()       
    161         {
    162             //base.Speek();
    163             Console.WriteLine("猫叫");
    164         }
    165 
    166         //构造函数
    167         public Cat(string name) : base(name) 
    168         {
    169         }
    170 
    171         //抽象方法
    172         override public void Speek2()
    173         {
    174             Console.WriteLine("猫也会叫了");
    175         }
    176 
    177         
    178 
    179         //隐式转换
    180         public static explicit operator Dog(Cat cat)
    181         {
    182             return new Dog(cat.name);
    183         }
    184 
    185         //委托
    186         public void Innocent()
    187         {
    188             Console.WriteLine("傻猫在发呆呢");
    189         }
    190     }
    191 
    192 
    193     class Program   //类名
    194     {
    195         //委托
    196         delegate void ActCute();
    197 
    198 
    199         static void Main(string[] args)
    200         {
    201             //多态
    202             //Pet dog = new Dog();   //父类引用指向 子类对象
    203             //dog.name = "Hello";
    204             //dog.printname();
    205             //dog.Speek();
    206 
    207             //Pet cat = new Cat();
    208             //cat.name = "World";
    209             //cat.printname();
    210             //cat.Speek();
    211 
    212             /////////////////////////////改进方法
    213             Pet[] pets = new Pet[] { new Dog("Jack"), new Cat("Tom") };     //子类对象 被 父类对象引用
    214             for (int i = 0; i < pets.Length; i++)
    215             {
    216                 pets[i].printname();
    217                 pets[i].Speek();
    218                 pets[i].Speek2();
    219             }
    220 
    221 
    222 
    223             Dog dog = new Dog("nima");
    224             dog.CatchMice();
    225             dog.ClimbTree();
    226 
    227             ICatchMice obj = (ICatchMice)dog;   //子类对象转化成 接口对象
    228             obj.CatchMice();
    229 
    230             IClimbTree obj2 = (IClimbTree)dog;  //子类对象转化成 接口对象
    231             obj2.ClimbTree();
    232 
    233             Dog.ShowAllDogNum();//通过类名直接调用静态函数
    234 
    235             Dog dog3 = new Dog("dog3");
    236             dog3.HowToFeedDog();//使用扩展类的方法
    237 
    238 
    239 
    240             //测试装箱 , 并且可以验证出这是2个独立的对象,互不影响
    241             {
    242                 int i = 3;
    243                 object oi = i;                                     //隐式转换
    244                 Console.WriteLine("{0},{1}", i, oi);
    245 
    246                 i = 4;
    247                 Console.WriteLine("{0},{1}", i, oi);
    248 
    249                 oi = 10;
    250                 Console.WriteLine("{0},{1}", i, oi);
    251 
    252             }
    253 
    254             //拆箱
    255             {
    256                 int i = 3;
    257                 object oi = i;
    258 
    259                 int j = (int)oi;                                    //显式转换
    260                 Console.WriteLine("{0},{1},{2}", i, oi, j);
    261 
    262 
    263                 i = 11;
    264                 oi = 22;
    265                 j = 33;
    266                 Console.WriteLine("{0},{1},{2}", i, oi, j);
    267             }
    268 
    269 
    270 
    271 
    272 
    273             {
    274                 //自定义转换  : 转换自定义的结构或类
    275 
    276                 Dog dog4 = new Dog("Jack");
    277                 dog4.Speek();
    278 
    279                 Cat cat4 = dog; //把dog类型转换成了cat类型
    280                 cat4.Speek();
    281 
    282 
    283                 Dog dog5 = (Dog)cat4;
    284                 dog3.Speek();
    285 
    286             }
    287 
    288 
    289 
    290 
    291 
    292             {
    293                 //集合 : 就相当于c++中的stl
    294 
    295 
    296                 //数组
    297                 List<Dog> list = new List<Dog>();
    298                 list.Add(new Dog("A"));
    299                 list.Add(new Dog("B"));
    300                 list.Add(new Dog("C"));
    301 
    302                 list.RemoveAt(1);
    303                 for(int i=0;i<list.Count;++i)
    304                 {
    305 
    306                     list[i].printname();
    307                 }
    308                 list.Clear();
    309 
    310 
    311 
    312                 Console.WriteLine("map---------------");
    313                 //map
    314                 Dictionary<string, Dog> dic = new Dictionary<string, Dog>();
    315                 dic.Add("A",new Dog("A"));
    316                 dic.Add("B",new Dog("B"));
    317                 dic.Add("C",new Dog("C"));
    318 
    319                 dic["A"].printname();
    320 
    321 
    322 
    323                 Console.WriteLine("栈---------------");
    324                 //stack 栈  <特点:  先进后出,后进先出> 像羽毛球桶,一边开口
    325                 //出栈  就是出来
    326                 //入栈  就是进去
    327                 //栈顶 
    328                 Stack<Pet> stack = new Stack<Pet>();
    329                 stack.Push(new Dog("A"));
    330                 stack.Push(new Cat("B"));                       //进栈
    331 
    332                 stack.Peek().printname();   //获取栈顶信息   
    333                 stack.Pop();                                    //出栈
    334                 stack.Peek().printname();
    335 
    336 
    337                 Console.WriteLine("队列---------------");
    338                 //队列 <特点: 先进先出>  自来水管,2头开口
    339                 Queue<Pet> queue = new Queue<Pet>();
    340                 queue.Enqueue(new Dog("a"));                     //入队
    341                 queue.Enqueue(new Dog("b"));
    342                 queue.Enqueue(new Dog("c"));
    343 
    344                 Pet pet = null;
    345                 pet = queue.Dequeue();                          //出队
    346                 pet.printname();
    347                 pet = queue.Dequeue();
    348                 pet.printname();
    349                 pet = queue.Dequeue();
    350                 pet.printname();
    351                
    352             }
    353 
    354 
    355 
    356 
    357             
    358             {
    359                 Console.WriteLine("队列---------------");
    360                 //委托
    361                 ActCute del = null;
    362                 Dog dog11 = new Dog("A");
    363                 Cat cat11 = new Cat("B");
    364 
    365                 del = dog11.WagTail;
    366                 del += cat11.Innocent;  //这里是追加的操作,类似 c++的 <<操作符
    367 
    368 
    369                 del += () =>
    370                 {
    371                     //Console.WriteLine("匿名方法---------------");
    372                    // Console.WriteLine("lambada表达式---------------");
    373                     Console.WriteLine("do nothing ...这特么的就是 匿名方法和lambada表达式的结合体?");
    374                 };
    375 
    376                 del();
    377 
    378             }
    379 
    380 
    381 
    382             {
    383                 Console.WriteLine("事件---------------");
    384                 //事件
    385                 //发布者:通知某件事情发生的,就是发布者           我发布了微博
    386                 //订阅者:对某事关注的,就是订阅者                 我关注了微博
    387 
    388 
    389                 //事件触发和注册
    390                 //事件发生时,会通知所有关注该事件的订阅者
    391                 //想在事件发生时被通知,必须注册以表示关注
    392 
    393 
    394 
    395 
    396 
    397 
    398             }
    399 
    400 
    401 
    402             //Ctrl+F5 等于c++的 system("pause");
    403             Console.ReadKey();//这个也相当于是 system("pause");
    404         }
    405     }
    406 }
  • 相关阅读:
    Win7电脑无法安全删除硬件并弹出媒体的解决方法
    Linux环境变量及其设置
    Linux环境变量文件environment, profile, bashrc含义
    Linux下设置和查看环境变量
    [Android Traffic] 让android应用在传输网络数据的时候更省电
    [Android Traffic] 看无线电波如何影响网络操作]
    [Android Pro] Android的5个进程等级
    [编码解码] Base64 编码换行和+号遍空格的处理
    [Android Traffic] Android网络开启、关闭整理
    [Android Traffic] android 流量计算方法
  • 原文地址:https://www.cnblogs.com/Froger/p/7027519.html
Copyright © 2011-2022 走看看