c#入门学习笔记
Hello World
//打印语句
Console.WriteLine("Hello World");
//暂停
Console.ReadKey();
数据类型
1.值类型 byte,char,short,int,long,bool,decimal,float,double,sbyte,uint,ulong,ushort
2.引用类型: 储存的不是值实际数据而是一个内存地址 object、dynamic 和 string。
3.对象类型:Object 类型检查是在编译时发生的
4.动态类型: 可以存储任何类型的值在动态数据类型变量中,类型检查在运行时
5.字符串(String)类型
6.指针类型(Pointer types)类型转换
- 隐式转换
- 显式转换
- Toxxx方法
变量
常量
- 整数常量
- 整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制。
- 整数常量也可以带一个后缀,后缀是 U 和 L 的组合,U 表示无符号整数(unsigned),L 表示长整数(long)。后缀可以是大写,也可以是小写,U 和 L 的顺序任意。
- 浮点常量(小数必须包含整数)
- 字符常量
- 字符串常量
- 定义常量
- 整数常量
运算符
- 算数运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 赋值运算符
- 其他运算符
- sizeof():数据类型的大小
- typeof():返回 class的类型。
- &: 返回变量的地址
- *:变量的指针
- ?: :三元表达式
- is:判断对象是否为某一类型
- as: 强制转换,即使失败也不会抛出异常
判断:
- if
- switch
循环:
- while循环
- for/foreach
- do…while
封装:
- public:允许一个类将其成员变量和成员函数暴露给其他的函数和对象。任何公有成员可以被外部的类访问
- private:允许一个类将其成员变量和成员函数对其他的函数和对象进行隐藏。只有同一个类中的函数可以访问它的私有成员。即使是类的实例也不能访问它的私有成员。
- protected:该类内部和继承类中可以访问。
- internal:同一个程序集的对象可以访问。
- protected internal:3 和 4 的并集,符合任意一条都可以访问。
可空类型
//默认值为0
int a;
//默认值为null
int? b=123;
//如果b为null就赋值2否则c=b
int c= b?? 2;
Console.WriteLine("c的值为{0}", c);
Console.ReadLine();
数组
//初始化数组逐个赋值
int[] arr = new int[10];
arr[0] = 12312;
//初始化数组并赋值
int[] arr1 = { 321, 312, 12312, 12312312, 12312312 };
//使用for循环赋值
for (int i = 0; i < 10; i++)
{
arr[i] = i + 100;
}
//使用forEach取值
foreach (int i in arr)
{
Console.WriteLine("元素的值为{0}", i);
}
结构体
struct Books{
public string id;
public string name;
public string price;
}
static void Main()
{
Books book1;
book1.id = "123";
book1.name = "aaa";
book1.price = "23131";
Console.WriteLine("书信息:书id{0},书名{1},书价格{2}",book1.id,book1.name,book1.price);
Console.ReadLine();
}
- 类与结构的不同点
- 类是引用类型,结构是值类型
- 结构不支持继承
- 结构不能声明默认的构造函数
- 结构体中无法实例属性或赋初始值
- 类与结构的选择
- 当我们描述一个轻量级对象的时候,结构可提高效率,成本更低。数据保存在栈中,访问速度快
- 当堆栈的空间很有限,且有大量的逻辑对象或者表现抽象和多等级的对象层次时,创建类要比创建结构好一些;
- 类与结构的不同点
枚举
//枚举列表中的每个符号代表一个整数值,一个比它前面的符号大的整数值,可自定义每个符号
enum Days { Sun, Mon, Tue, Wed, Thu, Fri, Sat };
static void Enum()
{
int a = (int)Days.Wed;
Console.WriteLine(a);
Console.ReadLine();
}
析构函数
class Test
{
string id;
public Test()
{
Console.WriteLine("构造函数");
}
~Test()
{
Console.WriteLine("析构函数");
}
static void Main()
{
Test test = new Test { id = "123" };
Console.WriteLine("id为{0}", test.id);
Console.ReadLine();
} }
多态性
- 通过在类定义前面放置关键字 sealed,可以将类声明为密封类。当一个类被声明为 sealed 时,它不能被继承。抽象类不能被声明为 sealed。
- 当有一个定义在类中的函数需要在继承类中实现时,可以使用虚方法。虚方法是使用关键字 virtual 声明的。虚方法可以在不同的继承类中有不同的实现。
运算符的重载
class Test2
{
public int length;
//运算符重载
public static Test2 operator +(Test2 a, Test2 b)
{
Test2 test = new Test2 { length = a.length - b.length };
return test;
}
static void Main(string[] args)
{
Test2 test = new Test2 { length = 12 };
Test2 test1 = new Test2 { length = 213 };
Test2 t = test + test1;
Console.WriteLine("t的值{0}", t.length);
Console.ReadLine();
}
}
预处理器指令
define 预处理器
- 条件指令
异常处理
- try catch finally
- 常见异常:
- IO异常
- 空对象
- 类型转换
- 除以0
文件的输入与输出
//字节流读取文件
static void Main(string[] args)
{
StreamReader streamReader =new StreamReader(@"D:\Document\test.txt");
string line;
//读取文件内容
while ((line = streamReader.ReadLine()) != null)
{
//打印出来
Console.WriteLine(line);
}
Console.ReadLine();
}
windows文件系统操作
static void Main(string[] args) {
GetFile(@"D:\ProgramFiles");
Console.ReadLine();
}
//获得某文件夹下的文件名与大小
static void GetFile(String path) {
DirectoryInfo directoryInfo = new DirectoryInfo(path);
DirectoryInfo[] directoryInfo1 = directoryInfo.GetDirectories();
FileInfo[] files = directoryInfo.GetFiles();
if(directoryInfo1!=null) {
foreach(DirectoryInfo directoryInfo2 in directoryInfo1) {
if(directoryInfo2.Name!="app") {
GetFile(path+@"\"+directoryInfo2.Name);
}
}
}
if(files!=null) {
foreach(FileInfo file in files) {
Console.WriteLine("文件名:{0},文件大小{1}",file.Name,file.Length);
}
}
}
特性
预定义特性
1.AttributeUsage
2.Conditional
3.Obsolete:[Obsolete("过时了")]
编译器会给出警告信息[Obsolete("过时了",true)]
编译器会给出错误信息自定义特性
委托
delegate void ConsoleWrite1();
namespace ConsoleApp1 {
class Program { static void Main(string[] args) {
ConsoleWrite1 consoleWrite1 = new ConsoleWrite1(ConsoleWrite);
consoleWrite1();
Console.ReadLine();
}
static void ConsoleWrite() {
Console.WriteLine("测试");
}
委托的用途
static FileStream fs;
static StreamWriter sw;
// 委托声明
public delegate void printString(string s); // 该方法打印到控制台
public static void WriteToScreen(string str) {
Console.WriteLine("The String is: {0}",str);
}
// 该方法打印到文件
public static void WriteToFile(string s) {
fs=new FileStream(@"D:\Document\test.txt",
FileMode.Append,FileAccess.Write);
sw=new StreamWriter(fs);
sw.WriteLine(s);
sw.Flush();
sw.Close();
fs.Close();
}
// 该方法把委托作为参数,并使用它调用方法
public static void sendString(printString ps) {
ps("Hello World");
}
static void Main(string[] args) {
printString ps1 = new printString(WriteToScreen);
printString ps2 = new printString(WriteToFile);
sendString(ps1);
sendString(ps2);
Console.ReadKey();
}
- 指针变量
static unsafe void Test12() {
int i = 0;
int* p = &i;
Console.WriteLine("i的值为{0},内存地址为{1}",i,(int)p);
Console.WriteLine();
}
- 传递指针作为方法的参数
static unsafe void Main() {
int var1 = 10;
int var2 = 20;
Console.WriteLine("var1:{0},var2:{1}",var1,var2);
int* a = &var1;
int* b = &var2;
Swap(a,b);
Console.WriteLine("var1:{0},var2:{1}",var1,var2);
Console.ReadLine();
}
static unsafe void Swap(int* a,int* b) {
int temp =*a;
*a=*b;
*b=temp;
}
- 使用指针访问数组元素
static unsafe void array() {
int[] list = { 10,100,200 };
fixed (int* ptr = list)
/* 显示指针中数组地址 */
for(int i = 0;i<3;i++) {
Console.WriteLine("Address of list[{0}]={1}",i,(int)(ptr+i));
Console.WriteLine("Value of list[{0}]={1}",i,*(ptr+i));
}
Console.ReadKey();
- 指针变量
out参数:一个方法返回多个不同类型的参数
static void Main() {
string s="asd";
int i=Test7(out s);
Console.WriteLine(s);
Console.WriteLine(i);
Console.ReadLine(); } public static int Test7(out string a) {
a="asddddddddddd";
return 1;
}
- params参数
static void Main() {
Params(213,31231,12312,13231,123,1312,312,312,321,3,12,312,12);
}
static void Params(params int[] array) {
int max = array[0];
for(int i = 0;i<array.Length;i++) {
if(array[i]>max) {
max=array[i];
}
}
Console.WriteLine("最大值为{0}",max);
Console.ReadLine();
}
- ref参数
static void Main() {
int i = 30;
Ref(ref i);
Console.WriteLine(i);
Console.ReadKey();
}
static void Ref(ref int a) {
a+=500;
}
- 连接数据库
static void MysqlConnection() {
//配置连接信息
String connstr = "server=localhost;port=3306;user=root;password=123456;database=ztree";
MySqlConnection mySqlConnection = new MySqlConnection(connstr);
//打开连接
mySqlConnection.Open();
//sql语句
string sql = "select * from city";
MySqlCommand mySqlCommand = new MySqlCommand(sql,mySqlConnection);
//执行sql语句
MySqlDataReader mySqlDataReader = mySqlCommand.ExecuteReader();
while(mySqlDataReader.Read()) {
if(mySqlDataReader.HasRows) {
Console.WriteLine("id:{0};name:{1};pid:{2}",mySqlDataReader.GetString(0),mySqlDataReader.GetString(1),mySqlDataReader.GetString(2));
}
}
mySqlConnection.Close();
}
c#入门学习笔记的更多相关文章
- Hadoop入门学习笔记---part4
紧接着<Hadoop入门学习笔记---part3>中的继续了解如何用java在程序中操作HDFS. 众所周知,对文件的操作无非是创建,查看,下载,删除.下面我们就开始应用java程序进行操 ...
- Hadoop入门学习笔记---part3
2015年元旦,好好学习,天天向上.良好的开端是成功的一半,任何学习都不能中断,只有坚持才会出结果.继续学习Hadoop.冰冻三尺,非一日之寒! 经过Hadoop的伪分布集群环境的搭建,基本对Hado ...
- PyQt4入门学习笔记(三)
# PyQt4入门学习笔记(三) PyQt4内的布局 布局方式是我们控制我们的GUI页面内各个控件的排放位置的.我们可以通过两种基本方式来控制: 1.绝对位置 2.layout类 绝对位置 这种方式要 ...
- PyQt4入门学习笔记(一)
PyQt4入门学习笔记(一) 一直没有找到什么好的pyqt4的教程,偶然在google上搜到一篇不错的入门文档,翻译过来,留以后再复习. 原始链接如下: http://zetcode.com/gui/ ...
- Hadoop入门学习笔记---part2
在<Hadoop入门学习笔记---part1>中感觉自己虽然总结的比较详细,但是始终感觉有点凌乱.不够系统化,不够简洁.经过自己的推敲和总结,现在在此处概括性的总结一下,认为在准备搭建ha ...
- Hadoop入门学习笔记---part1
随着毕业设计的进行,大学四年正式进入尾声.任你玩四年的大学的最后一次作业最后在激烈的选题中尘埃落定.无论选择了怎样的选题,无论最后的结果是怎样的,对于大学里面的这最后一份作业,也希望自己能够尽心尽力, ...
- Scala入门学习笔记三--数组使用
前言 本篇主要讲Scala的Array.BufferArray.List,更多教程请参考:Scala教程 本篇知识点概括 若长度固定则使用Array,若长度可能有 变化则使用ArrayBuffer 提 ...
- OpenCV入门学习笔记
OpenCV入门学习笔记 参照OpenCV中文论坛相关文档(http://www.opencv.org.cn/) 一.简介 OpenCV(Open Source Computer Vision),开源 ...
- stylus入门学习笔记
title: stylus入门学习笔记 date: 2018-09-06 17:35:28 tags: [stylus] description: 学习到 vue, 有人推荐使用 stylus 这个 ...
- dubbo入门学习笔记之入门demo(基于普通maven项目)
注:本笔记接dubbo入门学习笔记之环境准备继续记录; (四)开发服务提供者和消费者并让他们在启动时分别向注册中心注册和订阅服务 需求:订单服务中初始化订单功能需要调用用户服务的获取用户信息的接口(订 ...
随机推荐
- 论文翻译 DOTA:A Large-scale Dataset for Object Detection in Aerial Images
简介:武大遥感国重实验室-夏桂松和华科电信学院-白翔等合作做的一个航拍图像数据集 摘要: 目标检测是计算机视觉领域一个重要且有挑战性的问题.虽然过去的十几年中目标检测在自然场景已经有了较重要的成就 ...
- Django开发简单采集用户浏览器信息的小功能
Django开发简单采集用户浏览器信息的小功能 Centos环境准备 yum install –y python-pip export http_proxy=http://10.11.0.148:80 ...
- KL距离(相对熵)
KL距离,是Kullback-Leibler差异(Kullback-Leibler Divergence)的简称,也叫做相对熵(Relative Entropy).它衡量的是相同事件空间里的两个概率分 ...
- 使用注解注入properties中的值的简单示例
spring使用注解注入properties中的值的简单示例 1.在web项目的src目录下新建setting.properties的文件,内容如下: version=1 2.在spring的xm ...
- Qt编写自定义控件40-导航进度条
一.前言 导航进度条控件,其实就是支付宝.京东.淘宝订单页面的进度控件,提示当前第几步,总共有几步,然后当前进度特殊颜色显示,每个进度带有时间文字等信息,本控件特意将三种样式风格都集成进去了,京东订单 ...
- SpringCloud学习成长之路三 服务消费者(Feign)
一.Feign简介 Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单.使用Feign,只需要创建一个接口并注解. 它具有可插拔的注解特性,可使用Feign 注解和JAX-RS ...
- Kafka Connect Architecture
Kafka Connect's goal of copying data between systems has been tackled by a variety of frameworks, ma ...
- Intellij-编译
目录 IntelliJ IDEA 编译方式介绍 编译方式介绍 编译触发按钮 运行之前的编译 @(目录) IntelliJ IDEA 编译方式介绍 编译方式介绍 相比较于 Eclipse 的实时自动编译 ...
- 这一次,真正掌握composer
思维导图 composer是现代PHP的基石 现代高级编程语言,依赖管理工具是必不可少的.Java有Maven,Python有pip,Nodejs有npm, 而在composer出现之前,PHP只 ...
- CentOS 7 命令
常用命令 文件与目录操作 命令 解析 cd /home 进入 ‘/home’ 目录 cd .. 返回上一级目录 cd ../.. 返回上两级目录 cd - 返回上次所在目录 cp file1 file ...