编程哲学之 C# 篇:005——"Hello,World!"
如第一章说明,程序员的创造能力最接近于神,那么从现在开始,让我们来开始愉快地创造世界吧!
用解决方案来管理我们的创作
运行我们安装好的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!"的更多相关文章
- 编程哲学之C#篇:02——学习思维
<代码大全>的第二章:介绍隐喻(类比)的思维方式, <经济学原理>的第二章:介绍怎么像经济学家一样思考, <计算机的心智操作系统之哲学原理>的第一章:介绍学习操作系 ...
- 编程哲学之C#篇:01——创世纪
我们能否像神一样地创建一个世界? 对于创建世界而言,程序员的创作能力最接近于神--相对于导演,作家,漫画家而言,他们创建的世界(作品)一旦完成,就再也不会变化,创建的角色再也不会成长.而程序员创建的世 ...
- 编程哲学之 C# 篇:007——如何创造万物
上帝拥有创建万物的能力,本文介绍创造万物的道,让你也拥有上帝般创造万物的能力! 道 中国哲学家,道家学派创始人--老子,在<道德经>写到: 道生一,一生二,二生三,三生万物 那么,是什么 ...
- Python黑帽编程2.1 Python编程哲学
Python黑帽编程2.1 Python编程哲学 本节的内容有些趣味性,涉及到很多人为什么会选择Python,为什么会喜欢这门语言.我带大家膜拜下Python作者的Python之禅,然后再来了解下P ...
- Linux shell脚本编程基础之练习篇
shell脚本编程基础之练习篇. 1.编写一个脚本使我们在写一个脚本时自动生成”#!/bin/bash”这一行和注释信息. #!/bin/bash ] then echo "请输入一个参数& ...
- 浅谈.Net异步编程的前世今生----APM篇
前言 在.Net程序开发过程中,我们经常会遇到如下场景: 编写WinForm程序客户端,需要查询数据库获取数据,于是我们根据需求写好了代码后,点击查询,发现界面卡死,无法响应.经过调试,发现查询数据库 ...
- Scala进阶之路-并发编程模型Akka入门篇
Scala进阶之路-并发编程模型Akka入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Akka Actor介绍 1>.Akka介绍 写并发程序很难.程序员不得不处 ...
- 浅谈.Net异步编程的前世今生----EAP篇
前言 在上一篇博文中,我们提到了APM模型实现异步编程的模式,通过使用APM模型,可以简化.Net中编写异步程序的方式,但APM模型本身依然存在一些缺点,如无法得知操作进度,不能取消异步操作等. 针对 ...
- 从编程哲学到开发应用:Spring的初步应用
一.前言 在学习Spring的过程中,我们学习了很多东西,可是实际应用中,我们究竟用到了那些?常用的又是那种方法呢? 二.书上与开发的差异 1.IOC 1) IOC,控制反转,是Spring框架的核心 ...
- 并发编程之第三篇(synchronized)
并发编程之第三篇(synchronized) 3. 自旋优化 4. 偏向锁 撤销-其它线程使用对象 撤销-调用wait/notify 批量重偏向 批量撤销 5. 锁消除 4.7 wait/notify ...
随机推荐
- 我的Vue之旅 10 Gin重写后端、实现页面详情页 Mysql + Golang + Gin
第三期 · 使用 Vue 3.1 + Axios + Golang + Mysql + Gin 实现页面详情页 使用 Gin 框架重写后端 Gin Web Framework (gin-gonic.c ...
- 如何使用webgl(three.js)实现3D储能,3D储能站,3D智慧储能、储能柜的三维可视化解决方案——第十七课
前言 上节课我们讲了<3D光伏发电>,与之配套的就是能量存储 这节课我们主要讲讲储能,储能站,在分布式能源系统中起到调节用对电的尖峰平谷进行削峰填谷的作用.特别是小型储能站,更加灵活,因地 ...
- C#自定义控件开发(2)—LED指示灯
下面来开发一个LED指示灯控件,如下: 设计属性包括: 外环宽度,外环间隙,内环间隙,颜色[五种],当前值. 由于该LED指示灯基本是完全独立设计的,并不是在某个控件的基础上进行的开发,因此,这里使 ...
- 关于软件物料清单(SBOM),你所需要了解的一切
在此前的多篇文章中,我们已经详细地介绍了软件物料清单(SBOM)对于保障软件供应链安全的重要性以及一些注意事项.在本文中,我们将会更深入地介绍SBOM,包括最低要求元素.格式.使用场景以及如何对其进行 ...
- linux如何删除多余网卡
ifconfig tunl0 down ip link delete tunl0
- Go语言核心36讲17
在前面的文章中,我们已经提到过很多次"指针"了,你应该已经比较熟悉了.不过,我们那时大多指的是指针类型及其对应的指针值,今天我们讲的则是更为深入的内容. 让我们先来复习一下. ty ...
- 7、将字符串数组s2中全部字符复制到字符数组s1中,不用strcpy函数
/* 将字符串数组s2中全部字符复制到字符数组s1中,不用strcpy函数 */ #include <stdio.h> #include <stdlib.h> void str ...
- 1、Docker最新入门教程-Docker概述
1. Docker概述 Docker 是一个用于开发.运输和运行应用程序的开放平台.Docker 使您能够将应用程序与基础架构分开,以便您可以快速交付软件.使用 Docker,您可以像管理应用程序一样 ...
- 为什么标准库的模板变量都是inline的
最近在看标准库里的type_traits的时候发现了个有趣的地方,几乎所有在标准库里的变量模板都是inline的! 不仅常见的实现上(libstdc++.libc++.ms stl)都是inline的 ...
- js-day01-商品订单信息
学会表格表单(html+css) 表格的默认CSS属性 *{ margin: 0; padding: 0; } tabl ...