饮水思源:金老师的自学网站网站
字段+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 } } }