C#面试基础知识2
1、C#三层架构
C#三层架构急表示层(UI,User Interface),业务逻辑层(BLL BusinessLogicLayer),数据访问层(DAL Data Access Layer)。三层的划分是物理上的划分。表示层(UI),这个最容易理解,就是用户看到的主界面。数据访问层(DAL),也不难理解,主要是负责数据的增删改查。业务逻辑层(BLL),算是表示层和数据访问层的桥梁吧。区分层次的目的即为了“高内聚,低耦合”的思想。
2.数据库基本操作
2.1 创建数据库
CREATE DATABASE database_name ON PRIMARY (
NAME= ,
FILENAME= ‘ ’
SIZE=,
MAXSIZE=,
FILEGROWTH= )
2.2 创建数据表
create table table_name (
学号 int primary key identity ,
名称 char() not null,
专业方向 varchar() not null,
系部代码 char() not null,
备注 varchar() )
2.3 数据添加
INSERT [into] table_name (column_list) VALUES(data_values)
2.4 数据修改(更新)
UPDATE table_name SET column_name=值 where[search_conditions]
2.5 删除数据
DELETE table_name WHERE [search_conditions]
2.6查找数据表
、输出表中的所有列 SELECT*FROM table_name
、输出表中部分列 SELECT A,B,C FROM table_name
、选择表中的若干记录 SELECT DISTINCT 列名 FROM table_name
、限制返回行数 SELECT TOP n FROM table_name
. 完整的select 语句的基本语法格式 虽然select 语句的完整语法较复杂,但是其主要的语法格式可归纳如下:
SELECT select_list [into new_table_name] FROM table_list
[WHERE search_conditions]
[GROUP BY group_by_expression] [HAVING search_condition]
[ORDER BY order_expression [asc|desc] ]
2.7 修改表结构
修改表结构 重命名表: exec sp_rename 'old_table_name','new_table_name‘
重命名列: exec sp_rename 'table_name.old_name','new_name','column‘
添加新列: alter table [table_name] add [new_column] varchar()
更改列的数据类型: alter table [table_name] alter column [column_name] [data_type]
删除列: alter table [table_name] drop column [column_name]
删除表: drop table table_name
删除表的所有数据: Truncate table [table_name]
创建主键约束: alter table [table_name]
add constraint pk
primary key clustered (列名)
创建外建约束 alter table [table_name]
add constraint wz
foreign key (列名)
references 表名(列名
3.数据库中的三范式
1、第一范式(1NF)
在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。例如,对于图3-2 中的员工信息表,不能将员工信息都放在一列中显示,也不能将其中的两列或多列在一列中显示;员工信息表的每一行只表示一个员工的信息,一个员工的信息在表中只出现一次。简而言之,第一范式就是无重复的列。
2、第二范式(2NF)
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被唯一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。如图3-2 员工信息表中加上了员工编号(emp_id)列,因为每个员工的员工编号是唯一的,因此每个员工可以被唯一区分。这个唯一属性列被称为主关键字或主键、主码。
第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。简而言之,第二范式就是非主属性非部分依赖于主关键字。
3、第三范式(3NF)
满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在图3-2的员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性。
4. C#中的委托
4.1 委托的申明
public delegate void MyDelegate(string str); //str参数为方法名,
4.2 委托的使用
MyDelegate d1 = new MyDelegate(C.M1); //如果M1非静态则需要使用 MyDelegate d1 = new MyDelegate(new C().M1);
d1("参数1"); // 参数1表示C.M1的函数使用的参数
public static void M1(string str) //静态属于类而不属于对象,
{
Console.WriteLine("From:C.M1: ", str);
}
注意:委托申明时(void 和 string类型,委托的申明与需要委托的函数有关)
4.3 委托的特性
MyDelegate d5 = d1 + d2; //组合特性
MyDelegate d6 = d5 - d3; //删除特性
5. 事件
5.1 定义事件类
public class TestEventArgs : EventArgs //集成事件EventArgs
{
public readonly char KeyToRaiseEvent;
public TestEventArgs(char keyToRaiseEvent)
{
KeyToRaiseEvent = keyToRaiseEvent;
}
}
5.2 声明事件委托和事件对象
public delegate void TestEventHandler(object sender, TestEventArgs e); //定义delegate
public event TestEventHandler TestEvent; //用event 关键字声明事件对象
5.3 事件触发方法
protected void OnTestEvent(TestEventArgs e) //为什么是虚函数
{
if (TestEvent != null)
TestEven t(this, e);
}
5.4 事件引用方法
public void RaiseEvent(char keyToRaiseEvent)
{
TestEventArgs e = new TestEventArgs(keyToRaiseEvent);
OnTestEvent(e);
}
5.5 监听事件类
public class TestEventListener
{
//定义处理事件的方法,他与声明事件的delegate具有相同的参数和返回值类型
public void KeyPressed(object sender, TestEventSource.TestEventArgs e)
{
Console.WriteLine("发送者:{0},所按得健为:{1}", sender, e.KeyToRaiseEvent);
}
//订阅事件
public void Subscribe(TestEventSource evenSource)
{
evenSource.TestEvent += new TestEventSource.TestEventHandler(KeyPressed);
}
//取消订阅事件
public void UnSubscribe(TestEventSource evenSource)
{
evenSource.TestEvent -= new TestEventSource.TestEventHandler(KeyPressed);
}
}
5.6 测试事件类
public class Test
{
public static void Main()
{
//创建事件源对象
TestEventSource es = new TestEventSource();
//创建监听对象
TestEventListener el = new TestEventListener();
//订阅事件
Console.WriteLine("订阅事件\n");
el.Subscribe(es);
//引发事件
Console.WriteLine("输入一个字符,再按enter键");
string s = Console.ReadLine();
es.RaiseEvent(s.ToCharArray()[]);
//取消订阅事件
Console.WriteLine("\n取消订阅事件\n");
el.UnSubscribe(es); //引发事件
Console.WriteLine("输入一个字符,再按enter健");
s = Console.ReadLine();
es.RaiseEvent(s.ToCharArray()[]);
}
}
C#面试基础知识2的更多相关文章
- 快速掌握JavaScript面试基础知识(三)
译者按: 总结了大量JavaScript基本知识点,很有用! 原文: The Definitive JavaScript Handbook for your next developer interv ...
- 快速掌握JavaScript面试基础知识(二)
译者按: 总结了大量JavaScript基本知识点,很有用! 原文: The Definitive JavaScript Handbook for your next developer interv ...
- 面试基础知识集合(python、计算机网络、操作系统、数据结构、数据库等杂记)
python python _.__.__xx__之间的差别 python中range.xrange和randrange的区别 python中 =.copy.deepcopy的差别 python 继承 ...
- Unity游戏开发面试基础知识
面试第一次知识总结: 一.Unity基本操作 1.unity提供哪几种光源? 点光源.平行光.聚光灯.区域光. 2.物体发生碰撞的必要条件什么? 两个物体必须有碰撞体Collider组件,一个物体上必 ...
- C语言面试基础知识整理
一.预处理 1.什么是预编译?何时需要预编译? (1)预编译又称预处理,是做些代码文本的替换工作,即程序执行前的一些预处理工作.主要处理#开头的指令,如拷贝#include包含的文件代码.替换#def ...
- lua面试基础知识
1.lua中八种基础类型:nil(空),boolean(布尔),number(数字),string(字符串),userdata(自定义类型),function(函数),thread(线程),table ...
- Python 必备面试基础知识-3
今天继续分享 Python 相关的面试题,你准备好了嘛! 网络编程篇 1. 简述 OSI 七层协议 是网络传输协议,人为的把网络传输的不同阶段划分成不同的层次. 七层划分为:应用层.表示层.会话层.传 ...
- .NET面试基础知识
1. 什么是Asp.Net? 答:Asp.Net是一种基于.NET平台下的动态web开发技术,它使用的是codebehind(代码后置技术),可以将前台呈现和后台代码进行有效的分离. 2. ...
- C++面试基础知识
C++经典面试题(最全,面中率最高 1.new.delete.malloc.free关系 delete会调用对象的析构函数,和new对应free只会释放内存,new调用构造函数.malloc与free ...
随机推荐
- Oracle 学习----:创建表(主键自增)
一.创建表 create table testTable ( Id numbere, name varchar2(100), age number, createTime date, primary ...
- 微信小程序--问题汇总及详解之tab切换
设置背景颜色就直接在page里设置 page {background-color: rgb(242, 242, 242);} tab切换: navigator 页面链接 传参的格式为url=&q ...
- HLG1125 循环小数2
循环小数 II Time Limit: 1000 MS Memory Limit: 65536 K Total Submit: 155(55 users) Total Accepted: 92(51 ...
- C++字符串高效查找替换,有空分析分析
void CWebTransfer::Substitute(char *pInput, char *pOutput, char *pSrc, char *pDst) { char *pi, *po, ...
- 解决报错DEFAULT_INCOMPATIBLE_IMPROVEMENTS
freemarker整合springMVC报错如下:警告: Exception encountered during context initialization - cancelling refre ...
- apache 列目录修复
描述 :Apache默认配置时允许目录浏览.如果目录下没有索引文件,则会出现目录浏览,导致文件信息泄漏. 检测方法:直接访问目录,如果能看到目录下的文件信息,则说明存在目录浏览漏洞 加固方法: 1 ...
- Activity启动创建 (AcitivtyManageService,ActivityThread,Activity)
ActivityThead,ActivityManagerService,Activity <<Android内核剖析>>中有一章节专门介绍 Activity框架和管理结构A ...
- 解决当打开Unity时 提示项目已经打开,而自己之前并没有打开过(可能之前异常关闭)的问题
当打开Unity时 提示项目已经打开,而自己之前并没有打开过(可能之前异常关闭) 发生这种情况时 打开项目目录中的 Temp文件夹,可以找到 一个 UnityLockfile 文件 将这个文件删除就可 ...
- PowerDesigner常用快捷键
一般快捷键 F4 打开检查模型窗口,检查模型 F5 如果图窗口内的图改变过大小,恢复为原有大小即正常大小 F6 放大图窗口内的图 F7 缩小图窗口内的图 F8 在图窗口内中查看全部 ...
- 将扁平化的JSON属性转换为嵌套的JSON
需要将如下JSON {"a":"a","b":"b","c.e":"e",&qu ...