рдХреНрд░рд╛рдЙрдЪрд┐рдВрдЧ рдЯрд╛рдЗрдЧрд░, рд╣рд┐рдбрди рдбреНрд░реИрдЧрди

рдЬрд╛рд╡рд╛ рдмрдирд╛рдо C # ... рдПрдХ рд╢рд╛рд╢реНрд╡рдд рддрд░реНрдХ рд╕реЗ рдмреЗрд╣рддрд░ рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдирд╣реАрдВ, рдпрд╣ рд▓реЗрдЦ рдЕрдЧрд▓реЗ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣ рдПрдХ рдкрд╡рд┐рддреНрд░ рдпреБрджреНрдз рднреА рдирд╣реАрдВ рд╣реИ, рдпрд╣ рд╕рд╡рд╛рд▓ рдХреЗ рд▓рд╛рдпрдХ рднреА рдирд╣реАрдВ рд╣реИ: "рдЬреЛ рдХреВрд▓рд░ рд╣реИред"

рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдп рдХрд╛ рдЕрдкрдирд╛ рдЙрдкрдХрд░рдг рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, C # рдФрд░ рд░реВрдмреА рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рдЙрдирдХрд╛ рдЗрдЪреНрдЫрд┐рдд рдЙрджреНрджреЗрд╢реНрдп рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣реИ, рдФрд░ рдкреНрд░рдХреГрддрд┐ рднреАред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ C # рдФрд░ Java рд╣реИ рдЬреЛ рдЙрдирдХреЗ рджрд░реНрд╢рди рдореЗрдВ рд╕рдмрд╕реЗ рдирдЬрд╝рджреАрдХ рд╣реИрдВред

рдмрд╣реБрдд рдмрд╛рд░, рдЬрд╛рд╡рд╛ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВ рдХреЛ рдмрд╣реБрдд рд╕реА (!!!) рдЪреАрдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ C # рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ (рдпрд╛, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдирд╣реАрдВ)ред

рдпрджрд┐ рдЖрдк рдмрд┐рдирд╛ рд╡рд┐рд╖рдпрд╡рд╕реНрддреБ рдХреЗ рд╕реА # рдФрд░ рдЬрд╛рд╡рд╛ рдХреЛ рджреЗрдЦрдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдФрд░ рдПрдХ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реБрд╡рд┐рдзрд╛ рдХреА рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рднреА рдкрддрд╛ рд▓рдЧрд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдЧреЗ рдмрдврд╝реЗрдВред

History рдереЛрдбрд╝рд╛ рдЗрддрд┐рд╣рд╛рд╕


рд╕реА # рднрд╛рд╖рд╛ 2001 рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреА, рдФрд░ рдЗрд╕рдХрд╛ рд╡рд┐рдХрд╛рд╕ 1999 рдореЗрдВ рд╡рд╛рдкрд╕ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рддрдм рдпрд╣ рдЬрд╛рд╡рд╛ 1.4 рдХреЗ рд╕рдорд╛рди рдерд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдзреБрдирд┐рдХ рд╕реА #, рдЬрд┐рд╕реЗ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ, рдХреЛ рд╕рдВрд╕реНрдХрд░рдг 2.0 (рдЬреЛ рдХрд┐ рдЬрд╛рд╡рд╛ 5 рдХреЗ рд░рд┐рд▓реАрдЬ рдХреЗ рд╕рдордп рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ) рдХреЗ рд╕рд╛рде рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдПрдХ рд░рд╛рдп рд╣реИ рдХрд┐ C # рдЬрд╛рд╡рд╛ рд╕реЗ рдмрд╣реБрдд рдХреБрдЫ рд▓реЗрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдЗрд╕рд╕реЗ рдкреВрд░реА рддрд░рд╣ рдЕрд╕рд╣рдордд рд╣реВрдВред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, C # рдХрд╛рдлреА рд╣рдж рддрдХ C "рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде" рдпрд╛ C ++ "рдорд╛рдирд╡ рдЪреЗрд╣рд░реЗ рдХреЗ рд╕рд╛рде" рд╣реИред

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд▓реЗрдЦ рдФрд░ рдЗрд╕рдореЗрдВ рджрд┐рдП рдЧрдП рддрд░реНрдХ рдЗрд╕ рдХрдерди рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВрдЧреЗред
рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд░реАрдЯреЗрд▓ рдореИрдВ рдирд╣реАрдВ рдХрд░реВрдБрдЧрд╛ рдЗрд╕рд▓рд┐рдП, рд╣рдо рддреБрд░рдВрдд рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреЗ рдФрд░ рдкреНрд░рдореБрдЦ рдЕрдВрддрд░ рдФрд░ рдлрд╛рдпрджреЗ рд╕реЗ рдЧреБрдЬрд░реЗрдВрдЧреЗред

рдкрд╣рд▓реЗ рд╣рдо рд╕реНрд╡рдпрдВ рдЬреЗрд╡реАрдПрдо рдФрд░ рдХреЙрдорди рд▓реИрдВрдЧреНрд╡реЗрдЬ рд░рдирдЯрд╛рдЗрдо (рд╕реАрдПрд▓рдЖрд░) рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рдлрд┐рд░ рд╣рдо рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рд╢реБрдЧрд░ C # рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВрдЧреЗред

тЦМ рдПрдкрд┐рд╕реЛрдб I: рдмрд╛рдпрдЯреЗрдХреЛрдб


.NET рдФрд░ Java рджреЛрдиреЛрдВ рд╣реА bytecode рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдмреЗрд╢рдХ, рдкреНрд░рд╛рд░реВрдк рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрддрд░ рд╣реИ - рдмрд╣реБрд░реВрдкрддрд╛ред

CIL (рдХреЙрдорди рдЗрдВрдЯрд░рдореАрдбрд┐рдПрдЯ рд▓реИрдВрдЧреНрд╡реЗрдЬ, рдЙрд░реНрдл тАЛтАЛMSIL, рдЙрд░реНрдл тАЛтАЛIL) рдкреЙрд▓рд┐рдореЙрд░реНрдлрд┐рдХ (рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд) рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдмрд╛рдИрдЯреЗрдХреЛрдб рд╣реИред

рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЬрд╛рд╡рд╛ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд▓рдЧ рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: fadd - 2 рдлрд╝реНрд▓реЛрдЯреНрд╕, iadd - 2 рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХрд╛ рдЬреЛрдбрд╝), рддреЛ CIL рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдкреЙрд▓реАрдореЙрд░реНрдлрд┐рдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рдирд┐рд░реНрджреЗрд╢ рд╣реИ ( рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рдПрдХ рдирд┐рд░реНрджреЗрд╢ рд╣реИ - рдЬреЛрдбрд╝реЗрдВ , рдЬреЛ рдлреНрд▓реЛрдЯ рдФрд░ рдкреВрд░реНрдгрд╛рдВрдХ рджреЛрдиреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ)ред рдЙрдкрдпреБрдХреНрдд x86 рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреА рдкреАрдврд╝реА рддрдп рдХрд░рдиреЗ рдХрд╛ рдореБрджреНрджрд╛ рдЬреЗрдЖрдИрдЯреА рдХреЗ рд╕рд╛рде рдЯрд┐рдХреА рд╣реБрдИ рд╣реИред

рджреЛрдиреЛрдВ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реИред рдЬрд╛рд╡рд╛ рдФрд░ CIL рдмрд╛рдЗрдЯрдХреЛрдб рдЖрджреЗрд╢реЛрдВ рдХреА рд╕реВрдЪреА рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реБрдП, рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ Java рдореЗрдВ 206 рдФрд░ CIL 232 рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдпрд╣ рдирд╣реАрдВ рднреВрд▓рддреЗ рд╣реИрдВ рдХрд┐ Java рдореЗрдВ рдХрдИ рдХрдорд╛рдВрдб рдмрд╕ рдПрдХ рджреВрд╕рд░реЗ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рджреЛрд╣рд░рд╛рддреЗ рд╣реИрдВред

тЦМ рдПрдкрд┐рд╕реЛрдб III: рдЬреЗрдирд░рд┐рдХ (рдкреИрд░рд╛рдореАрдЯрд░ рдХрд┐рдП рдЧрдП рдкреНрд░рдХрд╛рд░ || рдкреИрд░рд╛рдореАрдЯреНрд░рд┐рдХ рдмрд╣реБрд░реВрдкрддрд╛)


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЬрд╛рд╡рд╛ рдЗрд░реЗрдЬрд╝рд░ рдореИрдХреЗрдирд┐рдЬреНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рдЬреЗрдирд░рд┐рдХ рд╕рдорд░реНрдерди рдХреЗрд╡рд▓ рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд░рдирдЯрд╛рдЗрдо рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ, рдФрд░ рд╕рдВрдХрд▓рди рдХреЗ рдмрд╛рдж рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛрдЧреАред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЛрдб:

List<String> strList = new ArrayList<String>();
List<Integer> intList = new ArrayList<Integer>();

bool areSame = strList.getClass() == intList.getClass();
System.out.println(areSame);

true.

T java.lang.Object.

List<String> strList = new ArrayList<String>();
strList.add("stringValue");

String str = strList.get(0);

:

List list = new ArrayList();
list.add("stringValue");
String x = (String) list.get(0);

, .

.NET, , generics compile-time, run-time.

generics Java? , .NETтАЩa:


.. generics , . boxing/unboxing.

тЦМ IV: Types


Java -. . : (integer, float ..) java.lang.Object. generics Java primitive types.

- - everything is object.

. .

C# . тАУ struct.

:

public struct Quad
{
    int X1;
    int X2;
    int Y1;
    int Y2;
}

generics C# value types (int, float ..)

Java :

List<Integer> intList = new ArrayList<Integer>(); 

:

List<Integer> intList = new ArrayList<int>(); 

C# .

.NET.

.NET 3 : value, reference pointer types.

, value type тАУ primitive type Java. System.Object, , ( : value type , , boxing).

Reference type тАУ , reference types Java.

Pointer type тАУ .NETтАЩa. , CLR !

:

struct Point
{
    public int x;
    public int y;
}

unsafe static void PointerMethod()
{
    Point point;
    Point* p = &point;
    p->x = 100;
    p->y = 200;

    Point point2;
    Point* p2 = &point2;
    (*p2).x = 100;
    (*p2).y = 200;
}

C++ , ?

тЦМ V: C#


, C#:

C# , .. GetXXX, SetXXX. , object.PropertyX, object.GetPropertyX.

:

public class TestClass
{
    public int TotalSum
    {
        get
        {
            return Count * Price;
        }
    }

    //  -    
    public int Count
    {
        get; 
        set;
    }

    public int Price
    {
        get
        {
            return 50;
        }
    }
}

:

public class TestClass
{

    /*
    *  
    */
    private int <Count>k__BackingField;
    //  -    
    public int Count
    {
        get { return <Count>k__BackingField; }
        set { <Count>k__BackingField = value; }
    }
}

C/C++. . тАУ callback , .

.NET тАУ .

DLR (Dynamic Language Runtime тАУ .NET), dynamic C# 4 тАУ . C# dynamic.

Da Vinci Java, .. VM.

C#:

public class TestClass
{
    public delegate int BinaryOp(int arg1, int arg2);

    public int Add(int a, int b)
    {
        return a + b;
    }

    public int Multiply(int first, int second)
    {
        return first * second;
    }

    public void TestDelegates()
    {
        BinaryOp op = new BinaryOp(Add);
        int result = op(1, 2);
        Console.WriteLine(result);
        //: 3

        op = new BinaryOp(Multiply);
        result = op(2, 5);
        Console.WriteLine(result);
        //: 10
    }
}

C:

int Add(int arg1, int arg2) 
{
    return arg1 + arg2;
}

void TestFP() 
{
     int (*fpAdd)(int, int); 
     fpAdd = &Add; //  
     int three = fpAdd(1, 2); //    
}

, ? C ( float arg1, float arg2), C# тАФ . C# , .

- . , EventDispatcherтАЩ, Publisher/Subscriber. . .

:

public class MyClass
{
    private string _value;

    public delegate void ChangingEventhandler(string oldValue);

    public event ChangingEventhandler Changing;

    public void OnChanging(string oldvalue)
    {
        ChangingEventhandler handler = Changing;
        if (handler != null) 
            handler(oldvalue);
    }

    public string Value
    {
        get
        {
            return _value;
        }
        set
        {
            OnChanging(_value);
            _value = value;
        }
    }

    public void TestEvent()
    {
        MyClass instance = new MyClass();
        instance.Changing += new ChangingEventhandler(instance_Changing);
        instance.Value = "new string value";
        //   instance_Changing
    }

    void instance_Changing(string oldValue)
    {
        Console.WriteLine(oldValue);
    }
}

тАУ , .. .

:

public class TestClass
{
    public delegate int BinaryOp(int arg1, int arg2);

    public void TestDelegates()
    {
        BinaryOp op = new BinaryOp(delegate(int a, int b)
                                   {
                                       return a + b;
                                   });
        int result = op(1, 2);
        Console.WriteLine(result);
        //: 3
    }
}

?

-.

- тАФ , , .

public class TestClass
{
    public delegate int BinaryOp(int arg1, int arg2);

    public void TestDelegates()
    {
        BinaryOp op = new BinaryOp((a, b) => a + b);
        int result = op(1, 2);
        Console.WriteLine(result);
        //: 3
    }
}

? :

public class MyClass
{
    /*
     *   
     */

    public void TestEvent()
    {
        MyClass instance = new MyClass();
        instance.Changing += (o) => Console.WriteLine(o);
        instance.Value = "new string value";
        //  Console.WriteLine
    }
}

, (!!!). , C# , .. .

-, LINQ (Language Integrated Query).

LINQ? MapReduce LINQ?

public static class MyClass
{
    public void MapReduceTest()
    {
        var words = new[] {"...some text goes here..."};
        var wordOccurrences = words
            .GroupBy(w => w)
            .Select(intermediate => new
            {
                Word = intermediate.Key,
                Frequency = intermediate.Sum(w => 1)
            })
            .Where(w => w.Frequency > 10)
            .OrderBy(w => w.Frequency);
    }
}

SQL- :

public void MapReduceTest()
{
    string[] words = new string[]
        {
            "...some text goes here..."
        };
    var wordOccurrences =
        from w in words
        group w by w
        into intermediate
        select new
            {
                Word = intermediate.Key,
                Frequency = intermediate.Sum((string w) => 1)
            }
        into w
        where w.Frequency > 10
        orderby w.Frequency
        select w;
}

LINQ (GroupBy().Select().Where() ..), тАУ

new
    {
        Word = intermediate.Key,
        Frequency = intermediate.Sum(w => 1)
     }

тАж ? тАУ .

var. C++ 11 auto.

:

public void MapReduceTest()
{
    string[] words = new string[] { "...some text goes here..." };
    var wordOccurrences = Enumerable.OrderBy(Enumerable.Where(Enumerable.Select(Enumerable.GroupBy<string, string>(words, delegate (string w) {
        return w;
    }), delegate (IGrouping<string, string> intermediate) {
        return new { Word = intermediate.Key, Frequency = Enumerable.Sum<string>(intermediate, (Func<string, int>) (w => 1)) };
    }), delegate (<>f__AnonymousType0<string, int> w) {
        return w.Frequency > 10;
    }), delegate (<>f__AnonymousType0<string, int> w) {
        return w.Frequency;
    });
}

[ ]

C#, .. .

, C# 5 тАУ , , C++ 11!

тЦМ


C# Java , (.NET Java). тАФ .

C# тАФ Java. Microsoft, COOL (C-like Object Oriented Language). C/C++? .

, ( ) , .

!

Source: https://habr.com/ru/post/In145932/


All Articles