环境:VS Express 2013 for Desktop 也可以vs社区版,不过学习的话,Express本版做一些小的上位机工具应该是够用了
学习的网站:https://www.runoob.com/csharp/
c#是微软开发的,面面相对象的编程语言,再加上微软的ide,开发起来效率比较高,适合个人维护(知乎上说的),感觉和c语言有点相似。

VS Express 2013 for Desktop 可以开发vb,vc#,vc++,比Microsoft Visual C# 2010强大多了。两者同样都是免费的,win7就安装Microsoft Visual C# 2010

新建工程后,
默认开头就有以下代码,类似于c++的using namaspace std
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

以下是学习的笔记

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; //一般在程序开头添加 using System;,这时 string 相当于 System.String 。
namespace csharphello
{
class Program
{ } } //namespace HelloWorldApplication
//{
// class HelloWorld
// {
// static void Main(string[] args)
// {
// /* 我的第一个 C# 程序*/
// Console.WriteLine("Hello World");
// Console.ReadKey();
// }
// }
//} namespace RectangleApplication
{
class Class1
{ } class Class2 : Class1 //类Class2是类Class1的子类
{ }
class Rectangle
{
// 成员变量
double length;
double width;
public void Acceptdetails()//一个用来赋值的方法
{
length = 4.5;
width = 3.5;
}
public double GetArea()//一个用来计算的方法
{
return length * width;
}
public void Display()//一个用来打印的方法
{
Console.WriteLine("Length: {0}", length);
Console.WriteLine("Width: {0}", width);
Console.WriteLine("Area: {0}", GetArea());//打印GetArea方法的计算结果
}
} class ExecuteRectangle
{
static void Main(string[] args)//程序入口方法,创建实例,调用相应的方法
{
Rectangle r = new Rectangle(); //类的实例化
r.Acceptdetails();//其实是用来声明前面 Acceptdetails() 和 Display()。
r.Display(); /*当 WriteLine() 函数有多个参数时,输出第一个参数中的内容,
* 而第二个参数中的内容替换掉第一个参数中对应位置的占位符一起输出.
* 如果第一个参数没有留占位符,那么第二个参数内容不输出.
*
static void Main(string[] args)
{
Console.WriteLine("A:{0},a:{1}",65,97);
Console.ReadLine();
}
运行结果: A:65,a:97
当 WriteLine() 函数有多个参数时,输出第一个参数中的内容,而第二个参数中的内容替换掉第一个参数中对应位置的占位符一起输出。 如果第一个参数没有留占位符,那么第二个参数内容不输出. Console.WriteLine("A:,a:",65,97);
运行结果: A:,a:
占位符从零开始计数,且占位符中的数字不能大于第二个参数的个数减一(要求占位符必须有可替换的值). 占位符数字与第二个参数字符位置一一对应. static void Main(string[] args)
{
Console.WriteLine("A:{1},a:{0}",65,97);
Console.ReadLine();
}
运行结果: A:97,a:65
* / /*
* 隐式转换:C# 默认的以安全方式进行的转换。
* 本质是从小存储容量数据类型自动转换为大存储容量数据类型,
* 从派生类转换为基类。
*/
int inum = 100;
long lnum = inum; // 进行了隐式转换,将 int 型(数据范围小)数据转换为了 long 型(数据范围大)的数据
Class1 c1 = new Class2(); // 这里也是隐式转换,将一个新建的 Class2 实例转换为了其基类 Class1 类型的实例 C1
Class1 c11 = new Class1();
//Class2 c22 = c11 as Class2; //使用as进行显式转换
Class2 c22 = new Class2();
Console.WriteLine(c11 is Class1);
Console.WriteLine(c22 is Class2); //类型之间的转换 - Convert 和 Parse
string locstr = 123.ToString(); Console.WriteLine(locstr); //如果要将"locstr"转成整型数 //方法一: 用 Convert
int i16 = Convert.ToInt16(locstr); //方法二: 用 Parse
int ii = int.Parse(locstr); Console.WriteLine(i16);
Console.WriteLine(ii); /*
int.TryParse(string s,out int i)
* 该方式也是将数字内容的字符串转换为int类型,
* 但是该方式比int.Parse(string s) 好一些,
* 它不会出现异常,最后一个参数result是输出值,
* 如果转换成功则输出相应的值,转换失败则输出0。
*/
string s1 = "abcd";
string s2 = "1234";
int a, b;
bool bo1 = int.TryParse(s1, out a);
Console.WriteLine(s1 + " " + bo1 + " " + a);
bool bo2 = int.TryParse(s2, out b);
Console.WriteLine(s2 + " " + bo2 + " " + b); int aa = 9;
object obj;
obj = aa;
obj = 10;
Console.WriteLine("2: {0}", aa); // 输出:2: 9
Console.WriteLine("1: {0}", obj); // 输出:1: 10 /*
* 关于值类型、引用类型以及“栈”跟“堆”的关系
* 值类型,声明一个值类型的时候,是在“栈”中开辟一个内存空间来存放对应的值,
* 当值类型的值发生改变的时候,则直接修改该内存空间所保存的值。例:
*/
int n1 = 5;
int n2 = n1;
Console.WriteLine(n1 + " "+ n2); // 5 5
n2 = 7;
Console.WriteLine(n1 + " " + n2); // 5 7 /*
*
* 这里首先在“栈”中开辟一个内存空间用来保存 n1 的值 5,
* 接着再在“栈”中开辟一个新的内存空间用来保存 n2 的值 5,
* 所以显示出来的结果是 5 5。然后将 n2 在“栈”中对应的内存空间保存的值修改成 7,
* 故显示出来的结果是 5 7。引用类型,声明一个引用类型的时候,
* 首先是在“堆”中开辟一个内存空间来存放对应的值,
* 然后在“栈”中开辟一个内存空间用于保存在“堆”中开辟的内存空间的地址。
* 当系统调用引用类型的时候,首先去“栈”中获取到地址,
* 然后根据地址在“堆”中找到对应的内存空间来获取到对应值。
* 像数组这样的引用类型
*/
string[] a1 = new string[] { "a", "b", "c" };
string[] a2 = a1;
for (int i = 0; i < a2.Length; i++)
{
Console.Write(a2[i] + " "); //a b c
}
a1[2] = "d";
Console.WriteLine(); //换行
for (int i = 0; i < a2.Length; i++)
{
Console.Write(a2[i] + " "); //a b d
} /*
* 这里首先是在“堆”中开辟一个内存空间(假设:0X55)用来保存数组a1的值,
* 然后在“栈”中开辟一个内存空间(a1)用于保存地址 0X55。当将 a1 赋给 a2 时,
* 是将地址赋给 a2,即在“栈”中开辟一个内存空间(a2)用于保存地址 0X55,
* 所以输出 a2 的值是 a b c。当将 a1[2]修改成”d”的时候,
* 修改的是“堆”中 0X55 内存空间保存的值,
* 因为 a2 的地址和 a1 的地址一样,所以输出结果是 a b d。
* 而 string 是一个特殊的引用类型,先看下面代码:
*/ string ast = "123";
string bs = ast;
Console.WriteLine(ast + " " + bs); //123 123
bs = "456";
Console.WriteLine(ast + " " + bs); //123 456 /*
* C# 中对 double 类型的数据取整,可以使用 convert.toint32() 方法,
* 也可使用 int 强制转换为整数,使用 int 时并不存在四舍五入的情况,而是直接将后面的小数位数丢掉。比如:
*
* 如此可见,我们在进行数据转换前选择转换方法要谨慎,如果是数字类型可以考虑直接用(int)强制转换,
* 如果是整型字符串类型的,考虑用 int.Parse() 进行转换,如果不是这两种类型,
* 再考虑用 Convert.ToInt32() 进行转换。
*/
double da = 1.35;
double db = 1.65;
int ua1 = Convert.ToInt32(da);
int ua2 = (int)(da);
int ub1 = Convert.ToInt32(db);
int ub2 = (int)(db);
Console.WriteLine("{0}使用convert方法转化的结果为:{1}", da, ua1);
Console.WriteLine("{0}使用int强制转换的结果为:{1}",da, ua2);
Console.WriteLine("{0}使用convert方法转化的结果为:{1}", db, ub1);
Console.WriteLine("{0}使用int强制转换的结果为:{1}", db, ub2); //ua1 = int.Parse("4.5"); //能编译,但是运行出错
Console.WriteLine(ua1); //a b c string stra = "123"; // 将stra设置为字符串“123”
int intx = int.Parse(stra); // 转换
Console.WriteLine(intx); //a b c try
{
Console.WriteLine("输入数字,将计算出它加一的答案");
intx = int.Parse(Console.ReadLine()); //有可能会抛出异常
Console.WriteLine("答案是{0}", ++intx); //如果没有异常,程序才会进入这一步
}
catch (Exception)
{
Console.WriteLine("无法转换"); //如果捕获到异常,就说“无法转换”
}
Console.ReadKey();
//Console.ReadLine();
}
}
}

  

c#语言学习笔记(1)的更多相关文章

  1. HTML语言学习笔记(会更新)

    # HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...

  2. 2017-04-21周C语言学习笔记

    C语言学习笔记:... --------------------------------- C语言学习笔记:学习程度的高低取决于.自学能力的高低.有的时候生活就是这样的.聪明的人有时候需要.用笨的方法 ...

  3. 2017-05-4-C语言学习笔记

    C语言学习笔记... ------------------------------------ Hello C语言:什么是程序:程序是指:完成某件事的既定方式和过程.计算机中的程序是指:为了让计算机执 ...

  4. GO语言学习笔记(一)

    GO语言学习笔记 1.数组切片slice:可动态增长的数组 2.错误处理流程关键字:defer panic recover 3.变量的初始化:以下效果一样 `var a int = 10` `var ...

  5. Haskell语言学习笔记(88)语言扩展(1)

    ExistentialQuantification {-# LANGUAGE ExistentialQuantification #-} 存在类型专用的语言扩展 Haskell语言学习笔记(73)Ex ...

  6. Go语言学习笔记十三: Map集合

    Go语言学习笔记十三: Map集合 Map在每种语言中基本都有,Java中是属于集合类Map,其包括HashMap, TreeMap等.而Python语言直接就属于一种类型,写法上比Java还简单. ...

  7. Go语言学习笔记十二: 范围(Range)

    Go语言学习笔记十二: 范围(Range) rang这个关键字主要用来遍历数组,切片,通道或Map.在数组和切片中返回索引值,在Map中返回key. 这个特别像python的方式.不过写法上比较怪异使 ...

  8. Go语言学习笔记十一: 切片(slice)

    Go语言学习笔记十一: 切片(slice) 切片这个概念我是从python语言中学到的,当时感觉这个东西真的比较好用.不像java语言写起来就比较繁琐.不过我觉得未来java语法也会支持的. 定义切片 ...

  9. Go语言学习笔记十: 结构体

    Go语言学习笔记十: 结构体 Go语言的结构体语法和C语言类似.而结构体这个概念就类似高级语言Java中的类. 结构体定义 结构体有两个关键字type和struct,中间夹着一个结构体名称.大括号里面 ...

  10. Go语言学习笔记九: 指针

    Go语言学习笔记九: 指针 指针的概念是当时学C语言时了解的.Go语言的指针感觉与C语言的没啥不同. 指针定义与使用 指针变量是保存内存地址的变量.其他变量保存的是数值,而指针变量保存的是内存地址.这 ...

随机推荐

  1. MySQL单机优化---分表、分区、分库

    一.分表: 水平分表:根据条件把数据分为N个表(例如:商品表中有月份列,则可以按月份进行水平分表). 使用场景:一张表中数据太多,查询效率太慢. 当需要同时查询被水平分表的多张表时: 在两条SQL语句 ...

  2. Vue 动态路由的实现以及 Springsecurity 按钮级别的权限控制

    思路: 动态路由实现:在导航守卫中判断用户是否有用户信息,通过调用接口,拿到后台根据用户角色生成的菜单树,格式化菜单树结构信息并递归生成层级路由表并使用Vuex保存,通过 router.addRout ...

  3. JQuery高级(二)

    3. 事件绑定 1. jquery标准的绑定方式 * jq对象.事件方法(回调函数): * 注:如果调用事件方法,不传递回调函数,则会触发浏览器默认行为. * 表单对象.submit();//让表单提 ...

  4. LeetCode 5108. Encode Number - Java - 2进制

    题目链接:https://leetcode-cn.com/problems/encode-number/ Given a non-negative integer num, Return its en ...

  5. 【Linux】Ubuntu替换阿里源

    --------------------------------------------------------- 参考文章:https://www.jianshu.com/p/97c35d569aa ...

  6. Python基础知识(三)

    Python基础知识(三) 一丶整型 #二进制转成十进制的方法 # 128 64 32 16 8 4 2 1 1 1 1 1 1 1 例如数字5 : 101 #十进制转成二进制的方法 递归除取余数,从 ...

  7. Java知识回顾 (15) 文档注释

    说明注释允许你在程序中嵌入关于程序的信息. 你可以使用 javadoc 工具软件来生成信息,并输出到HTML文件中,使你更加方便的记录你的程序信息. javadoc 标签 标签 描述 示例 @auth ...

  8. IDEA中Tomcat热部署不生效问题解决办法

    IDEA中Tomcat热部署不生效问题解决办法 1.设置完热部署后 2.一定要在Debug模式下运行不要点RUN!!!!!!!!!!!!!!!!!

  9. springCloud学习笔记2(服务发现)

    本篇代码存放于:https://github.com/FleyX/demo-project/tree/master/springcloud/spring-cloud%E6%9C%8D%E5%8A%A1 ...

  10. 雪妖现世:给SAP Fiori Launchpad增添雪花纷飞的效果

    1995年7月,台湾大宇公司发布了一款国产单机角色扮演游戏神作:<仙剑奇侠传1>,所谓"一包烟,一杯茶",就能在电脑面前坐一整天. 这么经典的游戏Jerry当然已经通关 ...