带你真正了解C#,.NET,.NET.Framework.Net Core ,vs,及它们的联系,附代码证明

从写博客,博文当成一件学习,工作总结,到逐渐看到同行工作经历,感想,颇为熟悉亲切,颇觉有趣之感,

言归正传:起因是最近看腾讯课堂一位老师的讲解,加上自己的查找官方权威说明,对一直在写的C#代码,有了更加清楚的认识,

先说结论:也是一段这几天的收获

第一:C#是面向对象的编程语言,同时也是支持组件开发,后面一句话很多人忽视

仔细品这句哈,面向组件开发的语言

https://docs.microsoft.com/zh-cn/dotnet/csharp/tour-of-csharp/

第二:C#也存在版本,但是我很多人忽视这一点,它的版本和vs存在绑定关系

另外它的版本,和.NET版本没有直接关系

https://docs.microsoft.com/zh-cn/dotnet/csharp/whats-new/csharp-version-history

这篇文章说明了,C#版本从1.0到7.0

关于C# 7.0 C#7.3 C#8.0之间区别在这里,换句话说,新增什么语法,

写代码增加那些写法,见如下:

https://docs.microsoft.com/zh-cn/dotnet/csharp/whats-new/csharp-7-3

第三:什么是.NET ?它和C#什么关系?和NET Framework以及NET Core什么关系?

C#是一门编程语言,而.NET则是框架集,相当于一个统称,而比较典型,熟知的框架集

是.NET Framework .NET Core,重点理解,.NET不仅仅是支持C#语言,还支持F#等等

https://dotnet.microsoft.com/learn/dotnet/what-is-dotnet

第四:.NET Framework和.Net Core什么关系?并列关系,关于他们之间区别

请看这里https://docs.microsoft.com/zh-cn/dotnet/standard/choosing-core-framework-server

using System;
using System.Threading;

namespace ThreadMaxTestCore
{
    class Program
    {
        public delegate void a();
        static object lockObj = 1;
        private static void PrintThreadInfo(string info)
        {
            //使用的时候记得Lock一下,因为线程的创建和销毁是时刻在变的.
            lock (lockObj)
            {
                Console.WriteLine(info);
                Console.WriteLine($"当前线程ID:{Thread.CurrentThread.ManagedThreadId}");
                Console.WriteLine($"是否是背地里运行的线程ID(后台线程):{Thread.CurrentThread.IsBackground}");
                int workerThread = 0;
                int ioThread = 0;
                ThreadPool.GetMaxThreads(out workerThread, out ioThread);
                Console.WriteLine($"线程池内最大工作线程:{workerThread},最大io线程:{ioThread}");
                int workerThreadA = 0;
                int ioThreadA = 0;
                ThreadPool.GetAvailableThreads(out workerThreadA, out ioThreadA);
                Console.WriteLine($"线程池内最大可用线程:{workerThreadA},最大可用io线程:{ioThreadA}");
                //Console.ReadLine();
                //这个方法执行完,到x.BeginInvoke()会报错,.Net core没有支持这个方法
            }
        }

        static void Main(string[] args)
        {
            PrintThreadInfo("main函数打印");
            //
            a x = new a(()=> {
                //方法里面执行代码
                PrintThreadInfo("我是异步调用");
            });
            /*
             * 使用 .NET Framework 可以以异步方式调用任何方法。
             * https://docs.microsoft.com/zh-cn/dotnet/standard/asynchronous-programming-patterns/calling-synchronous-methods-asynchronously
             * 要实现此操作,请定义一个委托,此委托具有与你要调用的方法相同的签名;公共语言运行时会自动使用适当的签名为此委托定义 BeginInvoke 和 EndInvoke 方法。
             */
            x.BeginInvoke(null,null);
        }
    }
}

/*
net core框架集控制台输出 input:
main函数打印
当前线程ID:1
是否是背地里运行的线程ID(后台线程):False
线程池内最大工作线程:32767,最大io线程:1000
线程池内最大可用线程:32766,最大可用io线程:1000
Unhandled exception. System.PlatformNotSupportedException: Operation is not supported on this platform.
   at ThreadMaxTestCore.Program.a.BeginInvoke(AsyncCallback callback, Object object)
   at ThreadMaxTestCore.Program.Main(String[] args) in D:\vs_workspace\ThreadMaxTestCore\Program.cs:line 44

net framework框架集下控制台输出 input:
main函数打印
当前线程ID:1
是否是背地里运行的线程ID(后台线程):False
线程池内最大工作线程:2047,最大io线程:1000
线程池内最大可用线程:2047,最大可用io线程:1000
我是异步调用
当前线程ID:3
是否是背地里运行的线程ID(后台线程):True
线程池内最大工作线程:2047,最大io线程:1000
线程池内最大可用线程:2046,最大可用io线程:1000
请按任意键继续. . .
*/

/*
net core框架集控制台输出 input:
main函数打印
当前线程ID:1
是否是背地里运行的线程ID(后台线程):False
线程池内最大工作线程:32767,最大io线程:1000
线程池内最大可用线程:32767,最大可用io线程:1000
Unhandled exception. System.PlatformNotSupportedException: Operation is not supported on this platform.
   at ThreadMaxTestCore.Program.a.BeginInvoke(AsyncCallback callback, Object object)
   at ThreadMaxTestCore.Program.Main(String[] args) in D:\vs_workspace\ThreadMaxTestCore\Program.cs:line 44

net framework框架集下控制台输出 input:
main函数打印
当前线程ID:1
是否是背地里运行的线程ID(后台线程):False
线程池内最大工作线程:2047,最大io线程:1000
线程池内最大可用线程:2046,最大可用io线程:1000
我是异步调用
当前线程ID:3
是否是背地里运行的线程ID(后台线程):True
线程池内最大工作线程:2047,最大io线程:1000
线程池内最大可用线程:2046,最大可用io线程:1000
请按任意键继续. . .
*/

非常明显,.net core框架集项目下,用都是C#语法,支持BeginInvoke写法,

但是没有实现它,但.net framework就没有问题

个人理解是: 基本上Net Framework代表现在,Net Core代表未来,

基本上,微软是一直在更新C#语言语法规范的,和框架集合的,因此功能越来越强大,我们个人也是要不断学习

你可能感兴趣的:(.net程序集)