ASP.Net软件工程师基础(二)
1、封装
答:属性封装了字段,通过get和set访问器限制字段对外开放的程度;将重复的代码封装成方法,实现DCR原则(Don't Copy yourself);方法的参数组合可以用类实现,即在方法中不要传入超过3个以上的参数,否则定义一个类,直接将类对应的对象作为参数传入;将实现统一功能的类中所以的方法提取到接口或抽象类中(最明显的体现在三层中,DAL层抽象出一个只定义了增删查改功能的IDAL接口),至少也要写成虚方法,以实现面向对象编程(多态的实现)。
public interface IBaseDAL<T> where T : class,new()
{
T Add(T model);
bool Update(T model);
bool delete(int id);
T GetModel(int id);
List<T> GetList();
}
公用DAL层接口
public class BookDAL : IBaseDAL<Book>
{ public Book Add(Book model)
{
throw new NotImplementedException();
} public bool Update(Book model)
{
throw new NotImplementedException();
} public bool delete(int id)
{
throw new NotImplementedException();
} public Book GetModel(int id)
{
throw new NotImplementedException();
} public List<Book> GetList()
{
throw new NotImplementedException();
}
}
这里我就不写全了
具体类实现
2、继承
答:在C#中类是单继承的,而接口是可以多继承的(通常对于接口的继承我们称之为“实现接口”)
public class Student : Person,ICloneable,IEnumerable
{ public object Clone()
{
throw new NotImplementedException();
} public IEnumerator GetEnumerator()
{
throw new NotImplementedException();
}
}
继承的实现
继承的好处:代码重用;多态实现的方式之一(涉及到一个软件开发原则:里氏替换原则),举个例子,在方法中,参数传父类对象,而在调用是,只要传入子类对象就可以了,前提他们是继承关系。
class Program
{
static void Main(string[] args)
{
Child c = new Child();
c.Name = "TQ";
c.Age = ;
Console.WriteLine(Say(c));
Console.ReadKey();
} public static string Say(Person p)
{
return p.Name;
} public class Person
{
private string _name; public string Name
{
get { return _name; }
set { _name = value; }
} public int Age
{
get;
set;
} public string this[int key]
{
get
{
string result = "";
switch (key)
{
case : result = "a"; break;
case : result = "b"; break;
}
return result;
}
}
} public class Child : Person
{ }
}
里氏替换
构造函数不能被继承,通过base.方法(),可以在子类中调用父类的方法。
class Program
{
static void Main(string[] args)
{
Child c = new Child();
c.Name = "TQ";
c.Age = ;
Console.WriteLine(Say(c));
Console.ReadKey();
} public static string Say(Person p)
{
return p.Name;
} public class Person
{
private string _name; public string Name
{
get { return _name; }
set { _name = value; }
} public int Age
{
get;
set;
} public void Speach()
{
} public string this[int key]
{
get
{
string result = "";
switch (key)
{
case : result = "a"; break;
case : result = "b"; break;
}
return result;
}
}
} public class Child : Person
{
public void Speach()
{
base.Speach();
}
}
}
base调用父类方法
类中的成员如果不写访问修饰符默认是private
访问修饰符:Public(接口成员默认)、Protected、Private(类成员默认private)、internal(类默认internal)
访问级别约束:子类的访问级别不能比父类的高;类中属性或字段的访问级别不能比类的访问级别高;方法的访问级别不能比方法的参数和返回值的访问级别高(如果将上例代码中Person类的访问修饰符改为Private,编译就会报错)。
ASP.Net软件工程师基础(二)的更多相关文章
- ASP.Net软件工程师基础(一)
本人目前是一名有1年左右ASP.Net开发经验的的软件开发工程师,目前公司用的是MVC+EF+...做的网站.写这套总结性系列文章的目的有两个:一是帮助自己总结一下自己到底有多少斤两,而不是一味的学新 ...
- ASP.Net软件工程师基础(四)
1.接口 (1)接口是一种规范.协议,定义了一组具有各种功能的方法(属性.索引器本质是方法). (2)接口存在的意义:多态.多态的意义:程序可扩展性. (3)接口解决了类的多继承的问题. (4)接口解 ...
- ASP.Net软件工程师基础(三)
1.多态 答: (1)虚方法 public class Child : Person { public void Speach() { base.Speach(); } public virtual ...
- QT软件工程师招聘市场需求报告
QT软件工程师招聘市场需求报告 目录 最流行的编程语言排行榜 QT软件工程师职位需求 QT软件工程师薪资待遇 QT软件工程师行业需求 QT软件工程师QT技术需求 QT软件工程师基础技术需求 QT软件工 ...
- GIS基础软件及操作(二)
原文 GIS基础软件及操作(二) 练习二.管理地理空间数据库 1.利用ArcCatalog 管理地理空间数据库 2.在ArcMap中编辑属性数据 第1步 启动 ArcCatalog 打开一个地理数据库 ...
- 软件工程师 Book
一.软件工程师 --Clean Code<代码整洁之道> --Implementation Patterns<实现模式> --Code Complete<代码大全& ...
- 第二节:Web前端-ASP.NET之C#基础
第二节:Web前端-ASP.NET之C#基础 学习ASP.NET,要掌握学习语言,控件等技能, <div style="text-align: center; line-height: ...
- JavaSE 软件工程师 认证考试试卷3
JavaSE 软件工程师 认证考试试卷 笔试 考试时间150分钟 总分 100分 姓 名_______________________ 身份证号___________________ ...
- Java 初级软件工程师 认证考试试卷1
Java 初级软件工程师 认证考试试卷 笔试(A卷) 考试时间150分钟 总分 100分 姓 名_______________________ 身份证号_____________ ...
随机推荐
- Android ActionBarSherlock使用教程
Android ActionBarSherlock使用教程 本文转自 http://www.chenwg.com/android/actionbarsherlock%E4%BD%BF%E7%94%A8 ...
- window7 下 安装 apache24(httpd-2.4.10-x86-r2)加 php5.6(php-5.6.4-Win32-VC11-x86)加yaf(php_yaf-2.3.3-5.6-ts-vc11-x86)整合
window7 下 安装 apache24(httpd-2.4.10-x86-r2)加 php5.6(php-5.6.4-Win32-VC11-x86)加yaf(php_yaf-2.3.3-5.6-t ...
- [结]Oracle trigger(触发器)摘录
1.触发器: 是许多关系数据库系统都提供的一项技术.在ORACLE系统里,触发器类似过程和函数,都有声明,执行和异常处理过程的PL/SQL块. 触发器在数据库里以独立的对象存储,它与存储过程和函数不同 ...
- mysql 获取设置环境变量
mysql 获取环境变量 show global variables; 获取指定环境变量 show global variables like '%timeout'; 设置环境变量 set globa ...
- SSL证书在线工具
证书在线工具 如果您是第一次申请SSL证书,如果您对您的服务器如何使用SSL证书还不熟悉的话,我们推荐您使用本套工具,本套工具支持所有SSL服务器证书格式和各种WEB服务器.帮助您在线生成CSR文件, ...
- POI按照源单元格设置目标单元格格式
原文:http://jjw198874.blog.163.com/blog/static/1889845522011102401854234/ POI按照源单元格设置目标单元格格式 poi按照一个源单 ...
- 无法找到类:java.lang.ClassNotFoundException: com.tt.javaweb.HttpServletRequest问题解决
问题如下:找不到Httpservlet对应的Class,进入build目录下发现确实没有对应的class文件. 严重: Allocate exception for HttpServletReques ...
- activiti自定义流程之整合(四):整合自定义表单部署流程定义
综合前几篇博文内容,我想在整合这一部分中应该会有很多模块会跳过不讲,就如自定义表单的表单列表那一块,因为这些模块在整合的过程中都几乎没有什么改动,再多讲也是重复无用功. 正因为如此,在创建了流程模型之 ...
- Wordpress-数据库结构分析(转)
之前用了一段时间的Wordpress,觉得真的是一个优秀的博客系统,而且有大量的主题和插件.是我目前用过的最棒的一个博客平台.不仅如此,Wordpress 的代码也是写得非常漂亮,很适合用来学习PHP ...
- android的m、mm、mmm编译命令
android的m.mm.mmm编译命令的使用 android源码目录下的build/envsetup.sh文件,描述编译的命令 - m: Makes from the top of th ...