C#概念总结(一)
1、C#程序的框架问题
首先是命名的空间申明 (NameSpace delclaration)
一个 ClASS
class 方法
class属性
一个main 的方法
语句(Statement) & 表达式(Expression)以及注释
下面的一简单的程序
using System;
namespace HelloWorldApplication
{
class HelloWorld
{
static void Main(string[] args)
{
/* 我的第一个 C# 程序*/
Console.WriteLine("Hello World");
Console.ReadKey();
}
}
}
namespace 声明 是一系列的类
程序第一行using System ; using 关键字用于在在程序中的包含system命名空间,一个程序一般有、多个using语句, WriteLine是定义在system中的Console的一个方法,意思是在屏幕上显示输出
Console.ReadKey();是针对VS.NET用户,是的程序员等待一个按键的动作,防止visualstudio执行的时候屏幕会快速的关闭。
C#时代码大小写敏感的 与java不同的是,文件名可以和类名不相同。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace RectangleApplication
{
class Program
{
static void Main(string[] args)
{
Rectangle r = new Rectangle();
r.Getdetails();
r.Display();
Console.ReadLine();
J.Seize();
jiSuan J = new jiSuan();
}
}
class Rectangle
{
//先声明Rectangle的属性
double length;
double width;
public void Getdetails()
{
length = 23.2;
width = 2.34;
}
public double GetArea()
{
return length * width;
}
public void Display()
{
Console.WriteLine("Length:的长度", length);
Console.WriteLine("Width:的长度", width);
Console.WriteLine("Area:的面积", GetArea());
}
}
class jiSuan{
public void Seize(){
Console.WriteLine("Size of int ",sizeof(int ));
Console.ReadLine();
}
}
}
2、引用类型(refernece types )引用类型不包含存储在变量中的实际数据,但是他们包含对变量的实际引用。他们只一个内存地址,使用多个变量时,引用变量类型可以指向一个内存地址,
如果内存位置的数据是由一个变量改变的,其他变量会自动反应这种变换,内置的引用类型有 object,dynamic ,string
声明动态类型 Dynamic :课可以存储任何类型的值在动态数据类型当中,这些变量的类型检查是在运行的时候进行检查。
声明动态类型的语法格式:
dynamic <variable_name>=Value; 列如: dynamic d=232;
这里注意的是; 对象类型的变量检查实在编译的时候进行,而动态类型的变量检查实在运行的时候进行。
附:这里有一个特殊的符号 @
例如: String str=@"C:\windows"; 等价于 String str="C:\\Windows";
3、C#变量的使用
一个变量的只不过是一个程序操作存储区的名字。变量的类型定义了存储区的大小和布局,一定范围内的数据可以存储在内存中。 可以对变量进行一系列的操作。
输出的时可以使用占位符进行输出的 :
假如是三个变量现在进行输出
int a=12; int b=23; int c=a+b;
Console.WriteLine("a={0},b={1},c={2}",a,b,c); 这样就可以输出了 哈哈哈
Systyem命名空间中的Console类提供了一个函数Readline(),用于接受用户的输入,并把它保存到一个变量中。列如: int num; num=Convert.ToInt32(Console.ReadLine());
函数Convert.ToInt32()把用户输入的数据转换成int数据类型。这是因为Console.ReadLine()只接受字符串格式的数据。
4、C#中Lvalues和Rvalues : lvalues表达式可以出现在赋值语句的左边和右边,但是rvarlues 表达式只能出现在赋值语句的右边,不能出现在左边。
常量是固定的值,出现执行的时候不会发生变换,常量可以是任何基本的数据类型,比如证书常量,字符常量或者字符串常量,还有枚举类型的常量。 常量是可以被当做常规的变量的,只是他们的值在定义后不能再做改变。
5、c#常量定义的声明: 使用const关键字类定义,定义一个常量的语法如下:
const<data_type><constant_name>=value;
6、C#运算符的介:
sizeof() 返回数据的类型大小 sizeof(int ) 返回数据的带下是4
typeof()返回class 类型的 typeod(StreamRader)
& 取地址运算符,&a 讲得到的变量的实际地址
* 变量的指针 *a 将指向一个变量
as 强制转换,即便是转换时被也不会持续按错误。 Object obj =new StringReader("Hello"); StringReader r=obj as StringReader;
实际操作的一下代码。我这里并没有做详细整理。附录在下面:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ceshi
{
class Program
{
static void Main(string[] args)
{
int a = 1;
int b;
b = 23;
b = a++;
Console.WriteLine("a={0}", a);
Console.WriteLine("b={0}", b);
Console.ReadLine();
//++a 先自行进行增加运算在进行赋值。
a = 1;//初始化一下a的值
b = ++a;
Console.WriteLine("a={0}", a);
Console.WriteLine("b={0}", b);
Console.WriteLine("回车进行输出");
Console.ReadLine();
//a-- 先进性赋值运算再进行自减运算
a = 1;
b = a--;
Console.WriteLine("a={0}", a);
Console.WriteLine("b={0}", b);
Console.ReadLine();
//--a先进性自减运算,再赋值
a = 1;
b = --a;
Console.WriteLine("a={0}", a);
Console.WriteLine("b={0}", b);
Console.ReadLine();
//这是函数自增自减运算以及赋值的同时进行赋值运算。
//这里进行楼楼机判断的
a = 2;
b = 23;
if (a == b)
{
Console.WriteLine("line a=b ");
}
else
{
Console.WriteLine("line a 不等于 b");
}
if (a < b)
{
Console.WriteLine("a 小于 b");
}
else
{
Console.WriteLine("line a 不小于b");
}
if (a > b)
{
Console.WriteLine("line a大于b ");
}
else
{
Console.WriteLine(" a 不大于 b");
}
Console.ReadKey();
//下面进行逻辑判断的输出 C#的逻辑运算符的使用做一个实例的简单介绍
//首先声明一下两个变量的逻辑的初始值
/* bool a = false;
bool b = true;*/
//大家可以看到这行代码出现了问题, 就是因为之前已经进行了声明变量
test t = new test();
t.srt();
weiYunsuan G = new weiYunsuan();
G.set();
Yunsuan Y = new Yunsuan();
Y.yusuan();
QianzhiZhuanhuan Z = new QianzhiZhuanhuan();
Z.zhuanhuan();
}
}
class test
{
public void srt()
{
bool a = false;
bool b = true;
if (a && b)
{
Console.WriteLine("line a条件为真");
}
Console.ReadKey();
if (a || b)
{
Console.WriteLine("line a条件为真");
}
Console.ReadKey();
if (a & b)
{
Console.WriteLine("line a 的值为不知道");
}
Console.ReadKey();
if (!(a && b))
{
Console.WriteLine("line a的值为真");
} Console.ReadKey();
}
}
class weiYunsuan
{
int a = 43;
int b = 34;
int c = 0;
public void set()
{
c = a % b;
Console.WriteLine("line 1 -c 的值{0}", c);
c = a | b;
Console.WriteLine("line 2 -c 的值{0}", c);
c = a ^ b;
Console.WriteLine("line 3 -c 的值{0}", c);
c = ~a;
Console.WriteLine("line 4 -c 的值{0}", c);
c = a << 2;
Console.WriteLine("line 5-c 的值{0}", c);
c = a >> 2;
Console.WriteLine("line 6 -c 的值{0}", c);
Console.ReadKey();
}
}
class Yunsuan
{
public void yusuan()
{
int a = 23;
int c;
c = a;
Console.WriteLine("a:{0} ,c:{1}", a, c);
c += a;
Console.WriteLine("a:{0},c:{1}", a, c);
c += a;
Console.WriteLine("a:{0},c:{1}", a, c);
c -= a;
Console.WriteLine("a:{0},c:{1}", a, c);
c /= a;
Console.WriteLine("a:{0},c:{1}", a, c);
c = 89;
Console.WriteLine("a:{0},c:{1}", a, c);
c %= a;
Console.WriteLine("a:{0},c:{1}", a, c);
c <<= 2;
Console.WriteLine("a:{0},c:{1}", a, c);
c >>= 2;
Console.WriteLine("a:{0},c:{1}", a, c);
c %= 2;
Console.WriteLine("a:{0},c:{1}", a, c);
c ^= 2;
Console.WriteLine("a:{0},c:{1}", a, c);
c |= 2;
Console.WriteLine("a:{0},c:{1}", a, c);
Console.ReadKey();
}
}
class QianzhiZhuanhuan
{
public void zhuanhuan()
{
int a, b;
a = 12;
b = (a == 1) ? 23 : 4;
Console.WriteLine("b的值是{0}", b);
Console.ReadKey();
}
}
}
7、c#判断 判断结构要求程序员制定一个或者多个评估的条件吗,测试。以及条件的为真的时候要执行的语句( 必须的)和条件为假的时候要执行的语句(可选的)
C#循环语句: 循环的结构图如下:
这里简单说以个无限的循环
class Program{
static void Mian(String[] args){
for (;;)
{ Console.WriteLine(" hey Tian I am read" );
}}}
8、C#数组的输循环输出判断
9、C# 封装:被定义为把一个项目或多个项目封闭在一个屋里的或漏记的包中,在面向对象的设计方法论中,封装是为了防止对实现细节的访问。抽象和封装是面向对象的程序相关性。抽象允许相关信息的可视化,封装则使得开发者实现所需级别的抽象,C#封根据具体的需要,设置使用者的访问权限,并通过访问修饰符来实现。一个访问修饰符定义了一个类成员的范围和可见性。
- public:所有对象都可以访问;
- private:对象本身在对象内部可以访问;
- private 访问修饰符允许一个类将其他成员变量和成员函数其他的函数对象进行隐藏,只有同一个类中的函数可以访问他的私有成员,即使类的实例也不能访问他的私有成员变量。
- protected:只有该类对象及其子类对象可以访问(允许子类访问他的基类的成员变量和成员函数,这样有助于继承)
- internal:同一个程序集的对象可以访问;(允许一个类将其成员变量和成员函数暴露给当前程序中的其他对象和函数,换句话说,带有internal访问修饰符的任何成员可以在改成员所定义的应用程序的任何类或方法访问。)
- protected internal:访问限于当前程序集或派生自包含类的类型。
- 另外要注意的是如果一个方法白带任何的访问修饰符那么使用类成员的默认访问修饰符,就是privat