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软件工程师基础(二)的更多相关文章

  1. ASP.Net软件工程师基础(一)

    本人目前是一名有1年左右ASP.Net开发经验的的软件开发工程师,目前公司用的是MVC+EF+...做的网站.写这套总结性系列文章的目的有两个:一是帮助自己总结一下自己到底有多少斤两,而不是一味的学新 ...

  2. ASP.Net软件工程师基础(四)

    1.接口 (1)接口是一种规范.协议,定义了一组具有各种功能的方法(属性.索引器本质是方法). (2)接口存在的意义:多态.多态的意义:程序可扩展性. (3)接口解决了类的多继承的问题. (4)接口解 ...

  3. ASP.Net软件工程师基础(三)

    1.多态 答: (1)虚方法 public class Child : Person { public void Speach() { base.Speach(); } public virtual ...

  4. QT软件工程师招聘市场需求报告

    QT软件工程师招聘市场需求报告 目录 最流行的编程语言排行榜 QT软件工程师职位需求 QT软件工程师薪资待遇 QT软件工程师行业需求 QT软件工程师QT技术需求 QT软件工程师基础技术需求 QT软件工 ...

  5. GIS基础软件及操作(二)

    原文 GIS基础软件及操作(二) 练习二.管理地理空间数据库 1.利用ArcCatalog 管理地理空间数据库 2.在ArcMap中编辑属性数据 第1步 启动 ArcCatalog 打开一个地理数据库 ...

  6. 软件工程师 Book

    一.软件工程师  --Clean Code<代码整洁之道>  --Implementation Patterns<实现模式>  --Code Complete<代码大全& ...

  7. 第二节:Web前端-ASP.NET之C#基础

    第二节:Web前端-ASP.NET之C#基础 学习ASP.NET,要掌握学习语言,控件等技能, <div style="text-align: center; line-height: ...

  8. JavaSE 软件工程师 认证考试试卷3

    JavaSE 软件工程师 认证考试试卷   笔试   考试时间150分钟 总分 100分   姓    名_______________________ 身份证号___________________ ...

  9. Java 初级软件工程师 认证考试试卷1

    Java 初级软件工程师 认证考试试卷   笔试(A卷)   考试时间150分钟 总分 100分     姓    名_______________________ 身份证号_____________ ...

随机推荐

  1. eclipse中web工程新建jsp文件报错:The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path

    web工程中新建jsp文件提示:The superclass "javax.servlet.http.HttpServlet" was not found on the Java ...

  2. R(二): http与R脚本通讯环境安装

    结合实际的工作环境,在开始R研究的时候,首先着手收集的就是能以Web方式发布R运行结果的基础框架,无耐的是,R一直以来常使用于个人电脑的客户端程序上,大家习惯性的下载R安装包,在自己的电脑上安装 -- ...

  3. Newtonsoft.Json学习笔记

    Newtonsoft.Json,一款.NET中开源的Json序列化和反序列化类库(下载地址http://json.codeplex.com/). 下面是Json序列化和反序列化的简单封装: /// & ...

  4. 【linux】输出重定向

    “>”:把正确结果输出到一个文件 [root@andon ~]# ls > 1 [root@andon ~]# cat 1 1 anaconda-ks.cfg install.log in ...

  5. nova分析(7)—— nova-scheduler

    Nova-Scheduler主要完成虚拟机实例的调度分配任务,创建虚拟机时,虚拟机该调度到哪台物理机上,迁移时若没有指定主机,也需要经过scheduler.资源调度是云平台中的一个很关键问题,如何做到 ...

  6. 236. Lowest Common Ancestor of a Binary Tree

    Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According ...

  7. title与h1标签的区别和联系

    很多新站长在网站SEO过程中,会认为把H1等同于Title. 其实两是有区别和联系的,两者不能划等号.下面主要从文章和页面角度分析title和H1. H1等同于title吗? H1不等于title.H ...

  8. @property and retain, assign, copy, nonatomic解析

    nonatomic vs. atomic - "atomic" is the default. Always use "nonatomic". I don't ...

  9. (C#) 设定时间格式

    private string GetCurrentDateTime() { return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") ...

  10. [MySQL] 常用SQL的优化--18.4

    这里介绍下,Insert.Group By等SQL语句的优化方法: 1.大批量数据插入 当load命令导入数据的时候,可以进行适当的设置提高导入速度. 1.1 对于MyISAM表,可以先禁用非唯一索引 ...