1、HTML
超文本标记语言。
在HTML中存在大量的标签,用HTML提供的标签,将要显示在网页中的内容包含起来,就构成了我们的网页。
css:控制网页内容显示的效果
HTML+CSS=静态网页
HTML不区分大小写。
- 新建一个文本文件
- 将文件后缀修改为 .html或者.htm
- 开始写最基本的框架标签
HTML基本结构:
段落标签:
空格标签:
标题标签:<h#>:#=1
图片标签:
注释标签:
<html>
<head>
<title></title>
</head>
<body>
</body>
</html>
2、单例模式
- 将构造函数私有化
- 提供一个静态方法,返回对象
- 创建一个单例
子窗体
public static SystemConfig Frmsc = null;//创建一个静态对象(需要在静态函数中访问),全局唯一的单例
private SystemConfig()//构造函数私有化
{
InitializeComponent();
}
public static SystemConfig GetInterance()
{
//判断Frmsc是否为NULL,否的话创建一个对象,是的话说明已经创建对象了,直接返回已经创建的
//同时判断窗体资源是否被释放,如果打开后关闭窗体资源被释放,再次打开则会报错,需要加上资源是否被释放的判断
if (Frmsc == null || Frmsc.IsDisposed)
{
Frmsc = new SystemConfig();
}
return Frmsc;
}
父窗体调用
SystemConfig Frmsys = SystemConfig.GetInterance();
Frmsys.Show();
3、XML可扩展的标记语言
XML:储存数据
XML是严格区分大小写的,XML标签也是成对出现的。
XML有且只有一个根节点。
节点:
元素:
4、委托
A、为什么使用委托
将一个方法作为参数,传给另一个方法。此时这个参数的类型就是委托类型。
B、委托概念
委托所指向的函数必须跟委托具有相同的签名(签名也就是参数和返回值)
namespace _05_委托
{
//声明一个委托,指向一个函数
public delegate void DelSayHi(string name);
class Program
{
static void Main(string[] args)
{
//DelSayHi del = new DelSayHi(SayHiEnglish);
//或者下面的代码也可以
DelSayHi del = SayHiEnglish;
Test("张三", del);
Console.ReadKey();
}
public static void Test(string name, DelSayHi del)
{
//调用del
del(name);
}
public static void SayHiChinese(string name)
{
Console.WriteLine("吃了吗?"+name);
}
public static void SayHiEnglish(string name)
{
Console.WriteLine("Nice to meet you!"+name);
}
}
C、匿名函数
D、练习:使用委托求最大值
E、练习:使用委托求任意数组的最大值
F、泛型委托
G、多播委托
H、lamda表达式
J、使用委托实现窗体传值
5、窗体直接传递参数
通过公共变量声明,声明在父窗体中的变量,直接使用静态变量,然后用类名引用就可以了。
通过在子窗体中声明公共变量,不需要必须是静态的,使用对象名引用即可。
6、StringBuilder
在程序开发过程中,我们常常碰到字符串连接的情况,方便和直接的方式是通过”+”符号来实现,但是这种方式达到目的的效率比较低,且每执行一次都会创建一个String对象,即耗时,又浪费空间。使用StringBuilder类就可以避免这种问题的发生,下面就Stringbuilder的使用做个简要的总结:
1:StringBuilder.Append()
将内容追加到当前StringBuilder字符串的结尾。
public static void Main(string[] args)
{
StringBuilder Mysb = new StringBuilder("abc:");
Mysb.Append(" bcd");
Console.WriteLine(Mysb); // 输出: abc:def
Console.Read();
}
2.StringBuilder.AppendFormat()。
用一个带格式文本来代替字符串要传递的符号
static void Main(string[] args)
{
int Mysb1 = 100;
StringBuilder Mysb2 = new StringBuilder("你欠我:");
Mysb2.AppendFormat("{0:C}", Mysb1);
Console.WriteLine(Mysb2); // 输出: 你欠我:¥100
Console.Read();
}
3.StringBuilder.Insert(int,string)。
将字符串和对象插入到当前StringBuilder字符串的指定位置。使用此方法将一个单词插入到 StringBuilder 的第六个位置。
static void Main(string[] args)
{
StringBuilder MyStringBuilder = new StringBuilder("Hello World!");
MyStringBuilder.Insert(6, "插入");
Console.WriteLine(MyStringBuilder); //输出为: Hello 插入World!
Console.Read();
}
4.StringBuilder.Remove(p,n)。
在当前StringBuilder对象中移除指定的字符,就是说从p位置开始删除n个字符
static void Main(string[] args)
{
StringBuilder Mysb = new StringBuilder("Hello World!");
Mysb.Remove(2,2);
Console.WriteLine(MyStringBuilder); //输出为:heo world
Console.Read();
}
5.StringBuilder.Replace(a,b)。
就是用b替换a指定字符串,a和b都是字符或字符串。
static void Main(string[] args)
{
string a = "aaa.Baidu.com";
string b = a.Replace('a','w');
Console.WriteLine(b); // 输出:www.Baidu.com
}
实际上,当我们创建 StringBuilder 对象的时候,.NET 运行库会为当前的对象在内存中分配一块缓存区域,用以对字符串操作的预留空间。在使用 StringBuilder 类的时候,最好将容量设置为字符串可能的最大长度,确保 StringBuilder 不需要重复分配内存。如果字符的容量超过设置的最大容量,.NET 运行库将自动分配内存并翻倍。
对于我们 .NET 程序员而言,StringBuilder 与 String 的不同之处就在于,StringBuilder 可以显示的设置分配内存的大小,而 String 只能根据你初始化时的字符串的大小由系统分配足够的内存。