飲水思源:金老師的自學網站網站
字段+get/set方法=屬性spa
(以前都是把字段和屬性混着用。。)3d
經典寫法:code
using System; namespace ConsoleApp1 { class Program { static void Main(string[] args) { var x = new MyTest(); x.MyValue = "hello"; Console.WriteLine(x.MyValue); // => hello --2019/5/1 10:12:49 Console.ReadKey(); } } // 默認爲internal,程序集內可調用 // 若是是public,那就是公共的了,任何程序集均可以去調用到它 public class MyTest { // 屬性的經典實現方法 private string _myValue = ""; public string MyValue { get { return _myValue; } set { _myValue = value + " --" + DateTime.Now; } } } }
自動實現屬性(編譯器會自動添加一個私有字段):對象
class Program { static void Main(string[] args) { var x = new MyTest(); x.MyValue = "hello"; Console.WriteLine(x.MyValue); // => hello Console.ReadKey(); } } public class MyTest { public string MyValue { get; set; } }
其它玩法(來自原PPT截圖):blog
using System; using System.Collections.Generic; namespace ConsoleApp1 { class Program { static void Main(string[] args) { var x = new MyTest() { MyValue = "hello" }; // 不用專門去寫構造器的,可是無法直接設置對象的私有字段。 Console.WriteLine(x.MyValue); var objs = new List<MyTest>{ new MyTest { MyValue = "Hello" }, new MyTest { MyValue = "World" } }; // 直接初始化集合對象 // => hello Console.ReadKey(); } } public class MyTest { private string aPrivateValue; public string MyValue { get; set; } } }
相似於Java裏的package,容許嵌套索引
using ConsoleApp1.InnerNamespace; using System; namespace ConsoleApp1 { class Program { static void Main(string[] args) { var x = new MyTest() { MyValue = "hello" }; // 不用專門去寫構造器的,可是無法直接設置對象的私有字段。 Console.WriteLine(x.MyValue); // => hello Console.ReadKey(); } } namespace InnerNamespace { public class MyTest { private string aPrivateValue; public string MyValue { get; set; } } } }
基本概念(拷貝自PPT):get
定義本身的程序集(建立一個類庫項目,編譯成ddl):編譯器
namespace MyDdl1 { public class MathOpt { public static int add(int a, int b) { return a + b; } } }
引用本身的程序集(引用ddl):string
using MyDdl1; using System; namespace ConsoleApp1 { class Program { static void Main(string[] args) { int result = MathOpt.add(1, 2); Console.WriteLine(result); // => 3 } } }