在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
override : 主要是针对父类定义的虚方法virtua,表示自己只是一种基本实现,多数子类需要根据自己的情况重载; 下面这段,说的太牛逼了: C#中Abstract和Virtual在C#的学习中,容易混淆virtual方法和abstract方法的使用,现在来讨论一下二者的区别。二者都牵涉到在派生类中与override的配合使用。
一、Virtual方法(虚方法) virtual 关键字用于在基类中修饰方法。virtual的使用会有两种情况: 情况1:在基类中定义了virtual方法,但在派生类中没有重写该虚方法。那么在对派生类实例的调用中,该虚方法使用的是基类定义的方法。 情况2:在基类中定义了virtual方法,然后在派生类中使用override重写该方法。那么在对派生类实例的调用中,该虚方法使用的是派生重写的方法。 二、Abstract方法(抽象方法) abstract关键字只能用在抽象类中修饰方法,并且没有具体的实现。抽象方法的实现必须在派生类中使用override关键字来实现。 接口和抽象类: 最本质的区别:抽象类是一个不完全的类,是对对象的抽象,而接口是一种行为规范。 C# 是面向对象的程序设计语言,每一个函数都属于一个类。 地址是牛逼话的来源,还有几个例子
下面是做AD认证时候的一个继承关系 :
AccessControl 类
using System; namespace ActiveDirectoryDemo.Pages { public class AccessControl : System.Web.UI.Page %%%%注意这里 { //protected void Page_Load(object sender, EventArgs e) //{ //} public void IsUserIsAuthenticated() { if (!User.Identity.IsAuthenticated) { Response.Redirect("GotoUrl.aspx?returnUrl=" + Server.UrlEncode("Login.aspx")); } } public bool IsUserNameInGroup(System.Security.Principal.IPrincipal user, string groupName) { LDAPAuthentication adAuth = new LDAPAuthentication(); bool isUserNameInGroup = false; string _userName = user.Identity.Name; string[] _userNames = adAuth.GetUsersForGroup(groupName); for (int i = 0; i < _userNames.Length; i++) { if (_userName == _userNames[i]) { isUserNameInGroup = true; } } return isUserNameInGroup; } } } 具体的页面Administrators页面: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace ActiveDirectoryDemo.Pages { public partial class Administrators : AccessControl 注意这里 { protected void Page_Load(object sender, EventArgs e) { base.IsUserIsAuthenticated(); bool isUserNameInGroup = base.IsUserNameInGroup(User, "Administrators"); if (isUserNameInGroup == false) { string _userName = User.Identity.Name; //用户没有权限,跳转回之前请求的页面,也可以在跳转页面不显示本页跳转的菜单 Response.Redirect(System.Web.Security.FormsAuthentication.GetRedirectUrl(_userName, false)); } } } } 在C#的学习中,容易混淆virtual方法和abstract方法的使用,现在来讨论一下二者的区别。二者都牵涉到在派生类中与override的配合使用。 一、Virtual方法(虚方法) virtual 关键字用于在基类中修饰方法。virtual的使用会有两种情况: 情况1:在基类中定义了virtual方法,但在派生类中没有重写该虚方法。那么在对派生类实例的调用中,该虚方法使用的是基类定义的方法。 情况2:在基类中定义了virtual方法,然后在派生类中使用override重写该方法。那么在对派生类实例的调用中,该虚方法使用的是派生重写的方法。 二、Abstract方法(抽象方法) abstract关键字只能用在抽象类中修饰方法,并且没有具体的实现。抽象方法的实现必须在派生类中使用override关键字来实现。 接口和抽象类: 最本质的区别:抽象类是一个不完全的类,是对对象的抽象,而接口是一种行为规范。 C# 是面向对象的程序设计语言,每一个函数都属于一个类。 |
请发表评论