C# 类与接口的几个问题的总结(待续)
1. 有关类的多态性
C#中,类的多态性是通过在子类中重载基类的虚方法(virtual标识)或函数成员来实现。
在C#中,继承、虚方法和重写方法组合在一起才能实现多态性。
2. 显式接口成员的使用
显式接口成员属于接口的成员,而不是类的成员,因此,不能使用类对象直接访问,而只能通过接口对象来访问。
如:
interface IwgInterface1
{
int Add();
} interface IwgInterface2
{
int Add();
} class MyClass: IwgInterface1,IwgInterface2
{
int IwgInterface1.Add() // 显式接口的实现d
{
int x=;
int y=;
return x+y;
} int IwgInterface2.Add()
{
int x=;
int y=;
int z=;
return x+y+z;
}
} class Program
{
static void Main(string[] args)
{
MyClass myClass = new MyClass();
IwgInterface1 my_itf1 = myClass; // 使用接口继承类的对象实例化接口
IwgInterface2 my_itf2 = myClass; Console.WriteLine(my_itf1.Add()); //
Console.WriteLine(my_itf2.Add()); //
}
}
3. 抽象方法与抽象类
当从抽象类派生一个非抽象类时,需要再非抽象类中重写抽象方法,以提供具体的实现。重写抽象方法时,使用override关键字。
抽象类的示例如下:
public abstract class wgClass
{
public abstract void method1(); //抽象方法
}
public class Child: wgClass
{
public override void method1()
{
Console.WriteLine("0...0");
}
}
4. 抽象类与接口
抽象类和接口都包含可以由派生类继承的成员,他们都不能直接实例化,但可以声明它们的变量。如果这样做,就可以使用多态性把继承这两种类型的对象指定给它们的变量。接着,通过这些变量来使用这些类型的成员,但不能直接访问派生类的其它成员。
两者的区别:
抽象类的派生类只能继承一个基类, 但可以继承任意多个接口。
抽象类中可以定义成员的实现,但接口中不可以。
抽象类中可以包含字段、构造函数、析构函数、静态成员或常量等,接口不可以。
抽象类中的成员可以是私有的(只要它们不是抽象的),受保护的,内部的或者受保护的内部的成员(受保护的内部的成员只能在应用程序类本身或派生类中访问),但接口中的成员必须是公开的。
抽象类主要用于对昂系列的基类,共享某些主要特性。如共同的目的和结构。接口则主要用于类,这些类在基础水平上有所不同,但仍可以完成某些相同的任务。
5. 密封类与密封方法
密封类可以用来限制扩展性,如果弥生了某个类,则其它类不能从该类继承;如果是成员,则派生类不能重写该成员的实现。密封可以防止对库的类型和成员进行自定义。
满足以下条件,即可密封一个类:
类是静态类
类包含带有安全敏感的继承的受保护的成员。
类继承多个虚成员,并且密封每个成员的开发和测试开销明显大于密封整个类。
类是一个要求使用反射进行快速搜索的属性。密封属性可以提高反射在检索属性时的性能。
密封方法,例
public class Class1
{
public virtual void Method()
{
Console.WriteLine("0...0"); //基类中的虚方法
}
}
public sealed class MyClass: Class1
{
public sealed override void Method()
{
base.Method();
Console.WriteLine("密封类中重写后的方法");
}
}
C# 类与接口的几个问题的总结(待续)的更多相关文章
- 为什么类和接口不能使用private和protected?接口的方法不能使用private、protected、default
对于java程序员来说,java的访问权限修饰词public.protected.default.private的区别和使用肯定都不是问题,这里也不再啰嗦了,反正度娘一搜就一大把.最近在整理java ...
- C#与Java对比学习:类型判断、类与接口继承、代码规范与编码习惯、常量定义
类型判断符号: C#:object a; if(a is int) { } 用 is 符号判断 Java:object a; if(a instanceof Integer) { } 用 inst ...
- Effective java笔记(三),类与接口
类与接口是Java语言的核心,设计出更加有用.健壮和灵活的类与接口很重要. 13.使类和成员的可访问性最小化 设计良好的模块会隐藏起所有的实现细节,仅使用API与其他模块进行通信.这个概念称为信息隐藏 ...
- java类,接口浅谈
一般类,抽象类,接口的使用场景: 类;共同的特征和行为的抽取和封装 接口:标准,规范(功能的扩展) 需要对某个类进行功能的扩展,就让某个类实现这个接口,抽取出来称为接口 内部类: ...
- C#类和接口、虚方法和抽象方法及值类型和引用类型的区别
1.C#类和接口的区别接口是负责功能的定义,项目中通过接口来规范类,操作类以及抽象类的概念!而类是负责功能的具体实现!在类中也有抽象类的定义,抽象类与接口的区别在于:抽象类是一个不完全的类,类里面有抽 ...
- PHP面向对象学习五 类中接口的应用
类中接口的应用 接口:一种成员属性全部为抽象的特殊抽象类,在程序中同为规范的作用 抽象类:1.类中至少有一个抽象方法.2.方法前需要加abstract 接口: 1.类中全部为抽象方法,抽象方法前不 ...
- C#类、接口、虚方法和抽象方法0322
虚拟方法和抽象方法有什么区别与联系: 1.抽象方法只有声明没有实现代码,需要在子类中实现:虚拟方法有声明和实现代码,并且可以在子类中重写,也可以不重写使用父类的默认实现. 2.抽象类不能被实例化(不可 ...
- Java知多少(107)几个重要的java数据库访问类和接口
编写访问数据库的Java程序还需要几个重要的类和接口. DriverManager类 DriverManager类处理驱动程序的加载和建立新数据库连接.DriverManager是java.sql包中 ...
- Java高效编程之三【类和接口】
本部分包含的一些指导原则,可以帮助哦我们更好滴利用这些语言元素,以便让设计出来的类更加有用.健壮和灵活. 十二.使类和成员的访问能力最小化 三个关键词访问修饰符:private(私有的=类级别的).未 ...
- Android开发中,那些让您觉得相见恨晚的方法、类或接口
Android开发中,那些让你觉得相见恨晚的方法.类或接口本篇文章内容提取自知乎Android开发中,有哪些让你觉得相见恨晚的方法.类或接口?,其实有一部是JAVA的,但是在android开发中也算常 ...
随机推荐
- 谈谈WCF中的Data Contract(3):WCF Data Contract对Collection & Dictionary的支持
谈谈WCF中的Data Contract(3):WCF Data Contract对Collection & Dictionary的支持 在本篇文章上一部分Order Processing的例 ...
- POJ 1702
#include <iostream> #include <cmath> #define MAXN 100 using namespace std; void fun(int ...
- 关联式容器(associative containers)
关联式容器(associative containers) 根据数据在容器中的排列特性,容器可分为序列式(sequence)和关联式(associative)两种. 标准的STL关联式容器分为set( ...
- 解决maven-dependency-plugin (goals "copy-dependencies", "unpack") is not supported by m2e.错误
POM文件报错maven-dependency-plugin (goals "copy-dependencies", "unpack") is not supp ...
- LINQ——语言级集成查询入门指南(1)
本文主要是对语言级集成查询或简称为LINQ做一个介绍,包括LINQ是什么,不是什么,并对它在语言特性方面做一个简短的回顾,然后举一些使用LINQ的实际例子进行说明. 语言级集成查询是什么? 在我过去写 ...
- cojs 西瓜 解题报告
首先我们要知道pick公式 设二维平面内任意多边形面积为S 设多边形内部整点数为a 设多边形边界的整点数为b 则满足S=a+b/2-1 变形得a=S-b/2+1 由期望的线性性质我们把问题转化为 1. ...
- oracle触发器详解(转)
触发器是许多关系数据库系统都提供的一项技术.在ORACLE系统里,触发器类似过程和函数,都有声明,执行和异常处理过程的PL/SQL块. 8.1 触发器类型 触发器在数据库里以独立的对象存储,它与存储过 ...
- SQL Server数据导入导出的几种方法
在涉及到SQL Server编程或是管理时一定会用到数据的导入与导出, 导入导出的方法有多种,结合我在做项目时的经历做一下汇总: 1. SQL Server导入导出向导,这种方式是最方便的. 导入向导 ...
- 枚举桌面应用程序lnk路径并得到对应程序的绝对路径(使用SHGetDesktopFolder函数枚举,然后使用COM查询IShellFolder,IShellLink和IPersistFile接口)
// 枚举桌面上应用程序的lnk路径 void EnumDesktopLnkPath() { WCHAR szPath[MAX_PATH] = {0}; SHGetSpecialFolderPathW ...
- Eclipse:快捷
Ctrl +单击方法------------查看方法 ALT+/ -------------代码助手 Ctrl+O -------------列出方法和成员变量或布局结构 Ctrl+D ...