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 }
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 }
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 }
反序列化:就是将二进制转换为对象
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 }
作用:传输数据。
序列化: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 }
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 }