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
  • 相关阅读:
    构建单页面应用
    chrome进入控制台时自动进入断点模式的解决方法
    git安装--linux下的安装
    express响应前端ajax请求
    nodejs链接mongodb数据库
    Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式)介绍
    Nginx中如何限制某个IP同一时间段的访问次数
    nodejs && apidoc
    apidoc
    android sdk
  • 原文地址:https://www.cnblogs.com/ggsdduzbl/p/4945995.html
Copyright © 2011-2022 走看看