1. 程式人生 > >.net相關知識(一)

.net相關知識(一)

  1. 公共語言基礎結構(CLI)
  2. 如果某個程式僅訪問分配的記憶體,則該程式就是記憶體安全的
  3. 未託管的資源是指不由 .NET 執行時自動維護的資源。 例如,檔案控制代碼就是未託管的資源。 FileStream 物件是一個託管物件,但它引用未託管的檔案控制代碼。
  4. 在檔案I/O中,要從一個檔案讀取資料,應用程式首先要呼叫作業系統函式並傳送檔名,並選一個到該檔案的路徑來開啟檔案。該函式取回一個順序號,即檔案控制代碼(file handle),該檔案控制代碼對於開啟的檔案是唯一的識別依據。
  5. .net執行時(.NET Framework 公共語言執行時 (CLR)其中一種);
  6. .NET Standard 將取代可移植類庫 (PCL)。
  7. AOT預編譯器,IL中間語言,JIT實時編譯器
  8. 託管程式碼(簡而言之,託管程式碼就是執行過程交由執行時管理的程式碼。 )
  9. 為非託管資源釋放記憶體(實現IDispose介面包括檔案控制代碼、視窗控制代碼或網路連線)
  10. Convert轉換相關
        int j = checked(3);
        int k = Convert.ToInt32(false);
        int codePoint = 1067;
        IConvertible iConv = codePoint;
char ch = iConv.ToChar(null); //使用 ChangeType 方法的自定義轉換,Convert.ChangeType(Object, Type, IFormatProvider) 方法執行的
  1. 時間相關
        //string customFormat = "MMMM dd,yyyy (dddd)";
        //DateTime data1 = new DateTime(2019, 1, 7);
        //print(data1.ToString(customFormat));

        //int value = 123;
//print(value.ToString("D")); //foreach(var customString in DateTimeFormatInfo.CurrentInfo.GetAllDateTimePatterns('d')) //{ // print(customString); //} TimeSpan duration = new TimeSpan(1, 12, 23, 62); TimeSpan interval; string value = "1.03:14:56.1667"; try { interval = TimeSpan.ParseExact(value, "c", null); } catch (FormatException) { } catch (OverflowException) { } TimeSpan interval2 = TimeSpan.FromTicks(22233);方法執行的
  1. 字串相關
        string dateInput = "Jan 1, 2009";
        DateTime parsedDate = DateTime.Parse(dateInput);

        string MyString3 = "Thursday";
        DayOfWeek MyDays = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), MyString3);
  1. 編碼相關
        Encoding asciiEncoding = Encoding.ASCII;
        //asciiEncoding.GetByteCount();
        //asciiEncoding.GetString();
        //asciiEncoding.GetCharCount();
  1. 異常相關
        try
        {
            StreamReader sr = File.OpenText("data.txt");

            Console.WriteLine("The first line of this file is {0}", sr.ReadLine());
            sr.Close();
        }
        catch (Exception e)
        {

            print(e.Message);
           // throw new Exception();
        }
        //finally
        //{

        //}
  1. 垃圾回收(待補充)
  2. 正則表示式(待補充)
  3. 泛型相關
    public int IComparer<T>() { return 0; }
    public delegate bool Predicate<T>(T item);
    
    struct Sk
    {
        int ww;
    }
    public struct Nullable<T> where T:struct
    {
     
    }
    class Test<T,U> where U:struct where T : new()
    {

    }

    public class SampleClass<T,U,V>where T : V
    {

    }

    class BaseNode { }
    class BaseNodeGeneric<T> { }

    // concrete type
    class NodeConcrete<T> : BaseNode { }

    //closed constructed type
    class NodeClosed<T> : BaseNodeGeneric<int> { }

    //open constructed type 
    class NodeOpen<T> : BaseNodeGeneric<T> { }

    public delegate void Del<T>(T item);
    public static void Notify(int i) { }
    Del<int> m1 = new Del<int>(Notify);

    class Stack<T>
    {
        T[] items;
        int index;

        public delegate void StackDelegate(T[] items);
    }

    void Start()
    {
        Nullable<Sk> NI = new Nullable<Sk>();
        int wo = IComparer<string>();
        Predicate<int> bill = new Predicate<int>(wwwl);
        print(NI);
        print(wo);
        SampleClass<int, string, int> gg;
        //約束相關 struct class unmanaged new() <基類名> <介面名> U
        //某些約束是互斥的。 所有值型別必須具有可訪問的無引數建構函式。 struct 約束包含 new() 約束,且 new() 約束不能與 struct 約束結合使用。 unmanaged 約束包含 struct 約束。 unmanaged 約束不能與 struct 或 new() 約束結合使用。
    }
  1. 委託相關
    public class Point
    {
        public Point(int x, int y)
        {
            X = x;
            Y = y;
        }
        public int X;
        public int Y;
    }

    private void Start()
    {
        Point[] points = { new Point(100, 200),
                         new Point(150, 250), new Point(250, 375),
                         new Point(275, 395), new Point(500, 650) };

        Predicate<Point> predicate = FindPoints;

        Point[] first = Array.FindAll(points, predicate);
        foreach (var item in first)
        {
            print(string.Format("found: x={0},y={1}", item.X, item.Y));
        }
    }

    private bool FindPoints(Point obj)
    {
        return obj.X * obj.Y > 100000;
    }

  1. linq(待補充)
  2. 並行處理、併發和非同步程式設計(待補充)