zoukankan      html  css  js  c++  java
  • C#第十天

    1、c#中的访问修饰符

    public :公开的公共的

    private:私有的,只能在当前类的内部访问

    protected:受保护的,只能在当前类的内部以及该类的子类中访问。

    internal:只能在当前程序集中访问。在同一个项目中,internal和public的权限是一样。

    protected internal:protected+internal

    1)、能够修饰类的访问修饰符只有两个:public、internal。

    2)、可访问性不一致。子类的访问权限不能高于父类的访问权限,会暴漏父类的成员。

    2、设计模式

    设计这个项目的一种方式。

    3、简单工厂设计模式

     1 namespace 简单工厂设计模式
     2 {
     3     class Program
     4     {
     5         static void Main(string[] args)
     6         {
     7             Console.WriteLine("请输入你喜欢的笔记本品牌");
     8             string brand = Console.ReadLine();
     9             NoteBook nb = GetNoteBook(brand);
    10             nb.SayHello();
    11             Console.ReadKey();
    12         }
    13         /// <summary>
    14         /// 简单工程的核心,根据用户的输入创建对象赋值给父类
    15         /// </summary>
    16         /// <param name="brand"></param>
    17         /// <returns></returns>
    18         public static NoteBook GetNoteBook(string brand)
    19         {
    20             NoteBook nb = null;
    21             switch (brand)
    22             {
    23                 case "IBM": nb = new IBM();
    24                     break;
    25                 case "DELL": nb = new DELL();
    26                     break;
    27                 case "Acer": nb = new Acer();
    28                     break;
    29                 case "Lenovo": nb = new Lenovo();
    30                     break;
    31             }
    32             return nb;
    33         }
    34     }
    35     public abstract class NoteBook
    36     {
    37         public abstract void SayHello();
    38     }
    39     public class IBM : NoteBook
    40     {
    41         public override void SayHello()
    42         {
    43             Console.WriteLine("我是IBM笔记本");
    44         }
    45     }
    46     public class Acer : NoteBook
    47     {
    48         public override void SayHello()
    49         {
    50             Console.WriteLine("我是鸿基笔记本");
    51         }
    52     }
    53     public class Lenovo : NoteBook
    54     {
    55         public override void SayHello()
    56         {
    57             Console.WriteLine("我是联想笔记本");
    58         }
    59     }
    60     public class DELL : NoteBook
    61     {
    62         public override void SayHello()
    63         {
    64             Console.WriteLine("我是戴尔笔记本");
    65         }
    66     }
    67 }
    View Code

    4、值类型在复制的时候,传递的是这个值得本身。

    引用类型在复制的时候,传递的是对这个对象的引用。

    1)如图,当对象P1赋值给对象P2的时候,传递的是P1的引用(100001),所以P1,P2指向的是堆中的同一片空间,P1发生改变,P2也发生改变。


    2)

    3)字符串比较特殊,虽然是引用类型,但是字符串的不可变性使得其不会像上面一样输出。

     1 namespace 值类型和引用类型
     2 {
     3     class Program
     4     {
     5         static void Main(string[] args)
     6         {
     7             //值类型:int double char decimal bool enum struct
     8             //引用类型:string 数组 自定义类 集合 object 接口
     9             string s1 = "张三";
    10             string s2 = s1;
    11             s2 = "李四";
    12             Console.WriteLine(s1);
    13             Console.WriteLine(s2);
    14             Console.ReadKey();
    15         }
    16     }
    17 }
    View Code

    5、序列化:就是将对象转换为二进制

     1 namespace 序列化与反序列化
     2 {
     3     class Program
     4     {
     5         static void Main(string[] args)
     6         {
     7             //要将P这个对象,传输给对方电脑
     8             Person p = new Person();
     9             p.Name = "秀秀";
    10             p.Age = 23;
    11             p.Gender = '';
    12             using (FileStream fsWrite = new FileStream(@"C:UsersAdministratorDesktop2.txt", FileMode.OpenOrCreate, FileAccess.Write))
    13             {
    14                 //开始序列化对象
    15                 BinaryFormatter bf = new BinaryFormatter();
    16                 bf.Serialize(fsWrite,p);               
    17             }
    18             Console.WriteLine("序列化成功");
    19             Console.ReadKey();           
    20         }
    21     }
    22     [Serializable]//指示这个类可以序列化
    23     public class Person
    24     {
    25         private string _name;
    26 
    27         public string Name
    28         {
    29             get { return _name; }
    30             set { _name = value; }
    31         }
    32         private int _age;
    33 
    34         public int Age
    35         {
    36             get { return _age; }
    37             set { _age = value; }
    38         }
    39         private char _gender;
    40 
    41         public char Gender
    42         {
    43             get { return _gender; }
    44             set { _gender = value; }
    45         }
    46 
    47     }
    48 }
    View Code

    反序列化:就是将二进制转换为对象

     1 namespace 序列化与反序列化
     2 {
     3     class Program
     4     {
     5         static void Main(string[] args)
     6         {
     7             //接收对方发送过来的二进制,反序列化称对象
     8             Person p;
     9             using (FileStream fsRead = new FileStream(@"C:UsersAdministratorDesktop2.txt", FileMode.OpenOrCreate, FileAccess.Read))
    10             {
    11                 BinaryFormatter bf = new BinaryFormatter();
    12                 p = (Person)bf.Deserialize(fsRead);
    13 
    14             }
    15             Console.WriteLine(p.Name);
    16             Console.WriteLine(p.Age);
    17             Console.WriteLine(p.Gender);
    18             Console.ReadKey();
    19         }
    20     }
    21     [Serializable]//指示这个类可以序列化
    22     public class Person
    23     {
    24         private string _name;
    25 
    26         public string Name
    27         {
    28             get { return _name; }
    29             set { _name = value; }
    30         }
    31         private int _age;
    32 
    33         public int Age
    34         {
    35             get { return _age; }
    36             set { _age = value; }
    37         }
    38         private char _gender;
    39 
    40         public char Gender
    41         {
    42             get { return _gender; }
    43             set { _gender = value; }
    44         }
    45 
    46     }
    47 }
    View Code

    作用:传输数据。

    序列化:1)、将这个类标记为可以被序列化的。[Serializable] 

    6、partial部分类

     1 //部分类 成员之间可以互相使用
     2 public partial class Person
     3 {
     4     private string _name;
     5     public void Test()
     6     {
     7 
     8     }
     9 }
    10 public partial class Person
    11 {
    12     public void Test(string name)
    13     {
    14         _name = "";
    15     }
    16 }
    View Code

    7、sealed密封类

    不能够被其他类继承,但是可以继承于其他类。

    8.重写ToString()方法

     1 class Program
     2 {
     3     static void Main(string[] args)
     4     {
     5         Person p = new Person();
     6         Console.WriteLine(p.ToString());
     7         Console.ReadKey();
     8     }
     9 }
    10 
    11 public class Person
    12 {
    13     //重写父类(object),虚方法
    14     public override string ToString()
    15     {
    16         return "Hello World";
    17     }
    18 }
    View Code
  • 相关阅读:
    1058 A+B in Hogwarts (20)
    1046 Shortest Distance (20)
    1061 Dating (20)
    1041 Be Unique (20)
    1015 Reversible Primes (20)(20 分)
    pat 1027 Colors in Mars (20)
    PAT 1008 Elevator (20)
    操作系统 死锁
    Ajax的get方式传值 避免& 与= 号
    让IE浏览器支持CSS3表现
  • 原文地址:https://www.cnblogs.com/ggsdduzbl/p/4945995.html
Copyright © 2011-2022 走看看