如第一章说明,程序员的创造能力最接近于神,那么从现在开始,让我们来开始愉快地创造世界吧!

用解决方案来管理我们的创作

运行我们安装好的Visual Studio(以后一般情况下都会简称为VS),如下图所示,选择 文件新建项目

在弹出来的 新建项目 窗口中,如下图所示,选择 其他项目类型Visual Studio 解决方案空白解决方案

名称(N): 处,我们填写上 Universe

位置(L): 则根据自己的电脑环境选择自己想存放该解决方案的文件目录。

创建完 Universe 解决方案后,我们能看到VS界面右边的 解决方案资源管理器 应该会如下图所示

右击 解决方案'Universe' 选择 在文件资源管理器中打开文件夹 ,看看我们创建了什么。

我们看到了在文件目录中有一个叫 Universe.sln 的文件。

右击 解决方案'Universe' 选择 添加新建解决方案文件夹

然后给文件夹名称起名 .NET

再次右击 解决方案'Universe' 选择 添加新建解决方案文件夹

然后给文件夹名称起名 .NET Core

最终 解决方案资源管理器 应该会如下图所示

再次右击 解决方案'Universe' 选择 在文件资源管理器中打开文件夹 ,看看我们创建了什么。

我们看到了在文件目录中依然只有一个叫 Universe.sln 的文件。没有 .NET 文件夹或 .NET Core 文件夹。你也许会很困惑为什么会这样,后面会解释,这里让我们继续专注完成"Hello,World!" 例子把~

.NET版本的"Hello,World!"

解决方案资源管理器 右击 .NET 文件夹,选择 添加新建项目

在弹出来的 新建项目 窗口中,如下图所示,选择 Visual C#控制台应用(.NET Framework)

名称(N): 处,我们填写上 HelloWorld

位置(L): 文件夹路径尾部添加上 \.NET

框架(F): 选择最高的版本,不一定要和截图一致,截图中是 .NET Framework 4.7.1

点击 确定 按钮后,VS左边会打开 Program.cs 如下图所示

而在VS右边的 解决方案资源管理器 应该会如下图所以

我们会在 Program.cs 这个文件的 static void Main(string[] args){} 两个大括号之间添加代码,最终代码如下面所示

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace HelloWorld
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello,World!");
Console.WriteLine("宇宙纪元:" + DateTime.Now.ToString()); Console.ReadLine();
}
}
}

而在VS顶部菜单栏中点击 启动 ,或者按键盘上的 F5 ,运行我们刚刚编写的代码~

至此,我们完成了编程界著名的 "Hello,World!" 例子,同时也创造了我们第一个动态世界——每次点击 启动 ,或者按键盘上的 F5,运行我们编写的代码,每次的时间都不一样。虽然例子很简单,但记住,当你能力越强,创出出来的世界越丰富!

这里解释一下上面提到的为什么没有 .NET 文件夹或 .NET Core 文件夹。我们点击 解决方案资源管理器 中的 HelloWorld 项目,将其拖动到.NET Core 文件夹中

然后右击 解决方案'Universe' 选择 在文件资源管理器中打开文件夹 看看~

我们看到文件夹中.NET 文件夹和 Universe.sln 的文件,并没有.NET Core 文件夹,而.NET文件夹是我们在创建 HelloWorld 项目在 位置(L): 文件夹路径尾部添加上 \.NET 创建出来的。

因此我们可以得知在VS右边的 解决方案资源管理器 点击 解决方案'Universe' 选择 添加新建解决方案文件夹 创造出来的文件夹并不会出现在真实的文件目录中,只是用来管理我们项目的虚拟目录。当然我们可以将虚拟目录隐射到真实目录。介绍这些的原因是因为这里有几个概念需要读者先了解一个大概, 按物理分按逻辑分映射 ,同时介绍怎么更好地管理资源。

再次点击 解决方案资源管理器 中的 HelloWorld 项目,将其拖动回到 .NET 文件夹中,如下图所示~

.NET Core版本的"Hello,World!"

让我们在 .NET Core 文件夹下创建一个项目来试试.NET Core版本的"Hello,World!"把~

解决方案资源管理器 右击 .NET Core 文件夹,选择 添加新建项目

在弹出来的 新建项目 窗口中,如下图所示,选择 Visual C#.NET Core控制台应用(.NET Core)

名称(N): 处,我们填写上 HelloWorldCore

位置(L): 文件夹路径尾部添加上 \NetCore,特别不一样,再次体验 按物理分按逻辑分映射

点击确定 按钮后,VS右边的 解决方案资源管理器 应该如下图所示~

依然右击 解决方案'Universe' 选择 在文件资源管理器中打开文件夹 ,看看我们创建了什么。

新创建 Program.cs 的内容默认如下面代码段:

using System;

namespace HelloWorldCore
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}

我们添加添加代码后,如下面代码段展示:

using System;

namespace HelloWorldCore
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello,World!");
Console.WriteLine("宇宙纪元:" + DateTime.Now.ToString()); Console.ReadLine();
}
}
}

在VS右边的 解决方案资源管理器 ,右击 HelloWorldCore 选择 设为启动项目 ,如下图所示~

而在VS顶部菜单栏中点击 HelloWorldCore ,或者按键盘上的 F5 ,运行我们刚刚编写的代码。

至此,我们完成 "Hello,World!" 的.NET Core版本。

结束语

本章介绍如何创建两个版本的"Hello,World!",

但你应该很困惑,那些代码每行是什么意思啊,不用急,后面会一一解释。

下一章,将介绍什么是.NET,什么是.NET Core。

编程哲学之 C# 篇:005——"Hello,World!"的更多相关文章

  1. 编程哲学之C#篇:02——学习思维

    <代码大全>的第二章:介绍隐喻(类比)的思维方式, <经济学原理>的第二章:介绍怎么像经济学家一样思考, <计算机的心智操作系统之哲学原理>的第一章:介绍学习操作系 ...

  2. 编程哲学之C#篇:01——创世纪

    我们能否像神一样地创建一个世界? 对于创建世界而言,程序员的创作能力最接近于神--相对于导演,作家,漫画家而言,他们创建的世界(作品)一旦完成,就再也不会变化,创建的角色再也不会成长.而程序员创建的世 ...

  3. 编程哲学之 C# 篇:007——如何创造万物

    上帝拥有创建万物的能力,本文介绍创造万物的道,让你也拥有上帝般创造万物的能力! 道 中国哲学家,道家学派创始人--老子,在<道德经>写到: 道生一,一生二,二生三,三生万物 那么,是什么 ...

  4. Python黑帽编程2.1 Python编程哲学

    Python黑帽编程2.1  Python编程哲学 本节的内容有些趣味性,涉及到很多人为什么会选择Python,为什么会喜欢这门语言.我带大家膜拜下Python作者的Python之禅,然后再来了解下P ...

  5. Linux shell脚本编程基础之练习篇

    shell脚本编程基础之练习篇. 1.编写一个脚本使我们在写一个脚本时自动生成”#!/bin/bash”这一行和注释信息. #!/bin/bash ] then echo "请输入一个参数& ...

  6. 浅谈.Net异步编程的前世今生----APM篇

    前言 在.Net程序开发过程中,我们经常会遇到如下场景: 编写WinForm程序客户端,需要查询数据库获取数据,于是我们根据需求写好了代码后,点击查询,发现界面卡死,无法响应.经过调试,发现查询数据库 ...

  7. Scala进阶之路-并发编程模型Akka入门篇

    Scala进阶之路-并发编程模型Akka入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Akka Actor介绍 1>.Akka介绍 写并发程序很难.程序员不得不处 ...

  8. 浅谈.Net异步编程的前世今生----EAP篇

    前言 在上一篇博文中,我们提到了APM模型实现异步编程的模式,通过使用APM模型,可以简化.Net中编写异步程序的方式,但APM模型本身依然存在一些缺点,如无法得知操作进度,不能取消异步操作等. 针对 ...

  9. 从编程哲学到开发应用:Spring的初步应用

    一.前言 在学习Spring的过程中,我们学习了很多东西,可是实际应用中,我们究竟用到了那些?常用的又是那种方法呢? 二.书上与开发的差异 1.IOC 1) IOC,控制反转,是Spring框架的核心 ...

  10. 并发编程之第三篇(synchronized)

    并发编程之第三篇(synchronized) 3. 自旋优化 4. 偏向锁 撤销-其它线程使用对象 撤销-调用wait/notify 批量重偏向 批量撤销 5. 锁消除 4.7 wait/notify ...

随机推荐

  1. .Net6新版本的AssemblyLoadContext 加载程序集和卸载程序集

    准备俩个项目 第一个是控制台 第二个项目是类库 类库项目中只有一个示例class 将类库的代码生成dll 并且设置属性为复制到输出目录 using System.Runtime.Loader; var ...

  2. 【ELK解决方案】ELK集群+RabbitMQ部署方案以及快速开发RabbitMQ生产者与消费者基础服务

    前言: 大概一年多前写过一个部署ELK系列的博客文章,前不久刚好在部署一个ELK的解决方案,我顺便就把一些基础的部分拎出来,再整合成一期文章.大概内容包括:搭建ELK集群,以及写一个简单的MQ服务. ...

  3. 查看服务器出口ip

    [root@iZap201hv2fcgry1alvbznZ ~]# curl cip.cc IP : xxx.xxx.xx.xx 地址 : 中国 浙江 绍兴 运营商 : 移动 数据二 : 浙江省绍兴市 ...

  4. Spring校验器实例

    @size (min=3, max=20,message="用户名长度只能在3-20之间") @size (min=6, max=20,message="密码长度只能在6 ...

  5. DevExpress中GridControl控件焦点改变时触发事件

    FocusedRowObjectChanged 事件.可以在焦点改变一行的时候触发对应的事件. 做一个记录 大家如果有问题可以 Console.WriteLine("加群"+&qu ...

  6. 基于LSM树的存储机制简述

    下午听了关于MyRocks-PASV的研究讲座,很有意思所以学习了一下LSM树的一些简单的底层原理.现在整理一下 我们都知道目前Key:Value型的数据库普遍较之关系型数据库有着更好的表现,为什么会 ...

  7. java基础知识-lambda表达式

    一.什么是lambda? 在Java中,我们可以将一个值赋值给一个Java变量. int aValue = 129; String aString = "hello world"; ...

  8. 关于python函数传参

    必须参数 最常见的传参 def say(arg): print(arg) say("Hello world") 输出: Hello world 默认参数 def say(arg, ...

  9. SpringCloud Alibaba(二) - Sentinel,整合OpenFeign,GateWay服务网关

    1.环境准备 1.1Nacos 单机启动:startup.cmd -m standalone 1.2 Sentinel 启动命令:java -Dserver.port=8858 -Dcsp.senti ...

  10. tomcat 随windows启动

    有时候服务器会突然断电,维护管理员只会帮我们启动服务器,但是不会不会帮我们启动Tomcat. 1.进入tomcat的bin文件夹,找到startup.bat,右键生成快捷方式到桌面. 2.点击桌面左下 ...