Console.ReadLine();
Console.WriteLine();
C#中算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符的使用方法和C相同。
其他运算符 | 作用 |
---|---|
sizeof() | 返回数据类型的大小 |
typeof | 返回class的类型 |
is | 判断对象是否为某一类型。 |
as | 强制转换,即使转换失败也不会抛出异常。 |
封装被定义为"把一个或多个项目封闭在一个物理的或者逻辑的包中"。在面向对象程序设计方法论中,封装是为了防止对实现细节的访问。C# 封装根据具体的需要,设置使用者的访问权限,并通过 访问修饰符 来实现。
访问修饰符 | 访问权限 |
---|---|
public | 所有对象都可以访问; |
private | 对象本身在对象内部可以访问; |
protected | 只有该类对象及其子类对象可以访问 |
internal | 同一个程序集的对象可以访问; |
protected internal | 访问限于当前程序集或派生自包含类的类型。 |
C#中的方法类似于C中函数的功能
static void Main(string[] args)
{
}
访问修饰符 可选修饰符 返回类型 方法名称(参数列表)
{
return 返回结果;
}
private void Add(int a, int b)
{
return a + b;
}
using System;
namespace ConsoleApp1
{
class Program
{
private void Add(int a, int b)
{
return a + b;
}
static void Main(string[] args)
{
int a, b;
a = b = 100;
Program program = new Program();//创建一个新的类类型
program.test(a);//使用类名.方法名(参数)方法调用
Console.WriteLine(a);
}
}
}
按值传参只是将参数的数值传递给了方法,传递的参数在方法中的变化不会对原参数造成影响。
using System;
namespace ConsoleApp1
{
class Program
{
private void test(int x)
{
x = 5;
return;
}
static void Main(string[] args)
{
Program program = new Program();
int a = 100;
program.test(a);
Console.WriteLine(a);
}
}
}
输出结果为a = 100;
引用传参是将参数的地址传递给方法,原参数会随方法内参数的改变一起改变。
using System;
namespace ConsoleApp1
{
class Program
{
private void test(ref int x)
{
x = 5;
return;
}
static void Main(string[] args)
{
Program program = new Program();
int a = 100;
program.test(ref a);
Console.WriteLine(a);
}
}
}
return 语句可用于只从函数中返回一个值。但是,可以使用 输出参数 来从函数中返回两个值。输出参数会把方法输出的数据赋给自己,其他方面与引用参数相似。
using System;
namespace ConsoleApp1
{
class Program
{
private void test(out int x)
{
int tmp = 5;
x = tmp;
return;
}
static void Main(string[] args)
{
Program program = new Program();
int a = 100;
program.test(out a);
Console.WriteLine(a);
}
}
}
int[] num;
int[] num = new num[10];//定义数组大小为10
//方法一:下标赋值
int num = new num[10];
num[0] = 0;
//方法二:声明数组时赋值
int[] num = {
0, 1, 2, 3};
//方法三:初始化时赋值
int num = new num[10]{
0, 1, 2, 3};//设置数组大小再赋值
int num = new num[]{
0, 1, 2, 3, 4, 5}//不设置数组大小直接赋值,数组大小等于赋值后的大小
通过下标索引来访问
int[] num = {
0, 1, 2, 3};
int x = num[0];
for(int i = 0; i < num.Length(); i++)
{
Console.WriteLine(num[i]);
}
foreach(int i in num)
{
Console.WriteLine(i);
}
int a, b;
a = b = 1;
string str = string.Format("a={0}\nb={1}", a, b);
//标准数字格式化
//货币格式
string.Format("{0:c}",10);
//固定2位数字
string.Format("{0:d2}",5);
//四舍五入保留1位精度
string.Format("{0:f1}",1.23);
//百分数输出
string.Format("{0:p0}",0.1);
//转义符
string.Format("\"{0}\"","helloworld");
//输出格式化
//可以先字符串格式化再输出,或使用以下方法
Console.WriteLine("a={0}\nb={1}", a, b);
参考菜鸟教程-C#-C#字符串(string)
struct node
{
public int a;
public string str;
};
using System;
namespace ConsoleApp1
{
class Program
{
struct node
{
public int a;
public string str;
};
static void Main(string[] args)
{
node d;
d.a = 1;
d.str = "HelloWorld";
}
}
}
enum State
{
Walk, Run, Fly
};
using System;
namespace ConsoleApp1
{
class Program
{
enum State
{
Walk, Run, Fly
};
static void Main(string[] args)
{
State state;
state = State.Fly;
}
}
}
访问修饰符 class 类名
{
成员
}
类的默认访问标识符是 internal,成员的默认访问标识符是 private。
class Test
{
public int data;
public int getData()
{
return this.data;
}
}
using System;
namespace ConsoleApp1
{
class Test
{
public int data;
public int getData()
{
return this.data;
}
}
class Program
{
static void Main(string[] args)
{
Test test = new Test();//创建一个新的类类型
test.data = 100;//修改类的成员
Console.WriteLine(test.getData());//调用类的方法
}
}
}
静态成员的定义使用static关键字,与非静态成员相比,静态成员在定义时就开辟了存储空间,而非静态成员需要临时开辟存储空间,静态成员在任何情况下都会随着调用而受到影响,非静态成员只有在初始化之后调用才会收到影响。
using System;
namespace ConsoleApp1
{
class Test
{
public int data0;
public static int data1;
public void Add()
{
data1++;
}
public int getData0()
{
return this.data0;
}
public int getData1()
{
return data1;
}
}
class Program
{
static void Main(string[] args)
{
Test test0 = new Test();
Test test1 = new Test();
test0.data0 = 100;
test0.Add();
test1.data0 = 200;
test1.Add();
Console.WriteLine(test0.getData0());
Console.WriteLine(test1.getData0());
Console.WriteLine(test0.getData1());
Console.WriteLine(test1.getData1());
}
}
}
输出结果为:100、200、2、2
构造函数是类中一个特殊的方法成员,其功能是在定义类类型时自动调用该方法,一般可用于类的初始化。
访问修饰词 所在类类名
{
方法主体
}
using System;
namespace ConsoleApp1
{
class Test
{
public int data;
public Test()
{
this.data = 100;
}
}
class Program
{
static void Main(string[] args)
{
Test test = new Test();
Console.WriteLine(test.data);
}
}
}
输出结果为:100
函数重载可以让具有相同名称的方法具有不同的定义,通过调用方法时参数列表中参数的类型不同,或者是参数的个数不同来区分名称相同但功能不同的方法。
using System;
namespace ConsoleApp1
{
class Test
{
public int Add(int a, int b)
{
return a + b;
}
public int Add(int a, int b, int c)
{
return a + b + c;
}
}
class Program
{
static void Main(string[] args)
{
Test test = new Test();
Console.WriteLine(test.Add(1,2));
Console.WriteLine(test.Add(1, 2, 3));
}
}
}
以一个类为基础创建的一个新的子类,新产生的子类将拥有父类的所有成员,并且可以在此基础上创建新的成员。
class 子类名: 父类名
{
新成员
}
using System;
namespace ConsoleApp1
{
class Test0
{
public int data0;
public static int data1;
public void Add()
{
data1++;
}
public int getData0()
{
return this.data0;
}
public int getData1()
{
return data1;
}
}
class Test1 : Test0
{
public int data2;
public int getData2()
{
return this.data2;
}
}
class Program
{
static void Main(string[] args)
{
Test1 test1 = new Test1();
test1.data0 = 100;
test1.data2 = 200;
}
}
}