学习动机:
辅导员要求我写一个抽奖软件,正好借此机会学一下C#
学习网址:
笔记内容
namespace
Namespace is a collection of classes. 在程序开头using引入的就是namespae。例如,我们使用的Console类就是在System这个namespace里的。
每个程序自身有一个默认的namespace,我们书写的类就是包含在它里面的。
Console类
与java不同,C#的IO是通过Console类完成的(其实大同小异)
两个方法:ReadLine WriteLine
int的Parse
int一方面是C#的基本数据类型,另一方面又是一个类?
拥有Parse这个方法
for each
类似C++的range for,对容器进行遍历
基本格式:
foreach (string i in list)
Console.WriteLine(i);
ref out关键字
引用是为了解决函数只能够返回一个值的问题(matlab多好)
与C++不同,C#的函数如果需要传递引用,需要同时在函数调用和函数声明时加上ref关键字。
out关键字和ref关键字用法几乎相同,唯一区别为ref的实参需要初始化,而out不用;但是在方法中必须为这个变量赋值。
例:
static void Main(string[] args)
{
int number = 20;
AddFive(ref number);
Console.WriteLine(number);
Console.ReadKey();
}
static void AddFive(ref int number)
{
number = number + 5;
}
params关键字
在参数为类似String[]时,调用该函数形式较为复杂:
testFun(new String[] { "myk", "qingye" });
此时加上params关键字,可以用比较简单的方式调用该函数:
static void testFun(params String[] args)
{
}
testFun("myk", "qingye");
甚至可以传递空的参数
一个函数中只能出现一个prams关键字;当参数中出现params参数和其他参数的时候,params参数需要放在最后。
数组
数组初始化:
int[] a = new int[5] { 1, 2, 3, 4, 5 };
数组排序:
int[] a = new int[5] { 1, 2, 3, 5, 4 };
Array.Sort(a);
属性
C#中,属性可以用来控制字段的写入、写出(但他并不是字段)。
属性有get和set操作,可以只有一个使得它成为只读/只写的。get操作决定了当我们访问这个属性的时候能够得到什么(这个时候属性扮演一个字段的角色);set操作决定了当我们给这个属性赋值的时候,会进行什么(这个时候属性扮演一个方法的角色)。
属性可以设置public private等权限。
下面是一个例子:
public string Color
{
get
{
return color;
}
set
{
color = value+"test";
}
}
此处color是之前定义的一个private字段。在给Color属性赋值后,color会改变。
重要!几个概念的区分
field(字段):类似C++的私有变量。
property(属性):用来读和写字段的一种方便的形式。
这里我要特别提一下,关于属性和字段,网络上能够找到数以万计的博文,但几乎都是一个模子出来的,都没有把这两个简单的概念讲清楚。在看了这篇博客后才彻底搞清楚,不得不感慨,通过博客学不到什么东西,还是应该老老实实去看书。
一篇很好的博客
C#的继承和重写
C#中的继承和重写类似c++,只