每个人开始学习面向对象的时候,基本上都感觉自己很能理解什么是“继承”,可是我相信没有多少个人是真正地理解了“继承的本质”。
继承,就是面向对象中的类与类直接的关系,继承的类叫做子类或者派生类,而被继承的泪叫做父类、基类或者超类。通过继承,子类可以拥有父类的属性、方法,同时子类也可以添加新的属性或者方法,还可以修改父类的方法和属性等。
在《你必须知道的.NET》中,作者列举了下面几个关于继承的要点:
1、继承是可以传递的,子类是对父类的扩展,必须继承父类方法,同时可以添加新方法;
2、子类可以调用父类的方法、属性和字段,但是父类不能够调用子类的方法、属性和字段;
3、虚方法如何实现覆写操作,使得父类指针可以指向子类对象成员;
4、子类不仅继承了父类公共成员,也继承了私有成员,只是在子类中不被访问;
5、new在虚方法继承中起阻断作用。
上面这五条几乎可以说是继承的本质,深刻理解了这些,基本可以说对继承掌握了,不过还有一个比较重要的地方需要注意,请看:
#region 深入理解继承机制、多态、封装
public abstract class Animal
{
public abstract void ShowType();
public void Eat()
{
Console.WriteLine("All Animals need eating!");
}
}
public class Bird : Animal
{
private string type = "Bird";
public override void ShowType()
{
Console.WriteLine("Type is {0}", type);
}
private string color;
public string Color
{
get { return this.color; }
set { this.color = value; }
}
}
public class Chicken : Bird
{
private string type = "Chicken";
public override void ShowType()
{
Console.WriteLine("Type is {0}", type);
}
public void ShowColor()
{
Console.WriteLine("Color is {0}", Color);
}
}
#endregion
上面是定义了一个抽象父类和两个子类,下面是调用方法:
#region 深入理解OO思想
//Bird bird 创建的是一个Bird类型的引用,而new Bird()完成的是创建Bird对象,分配内存空间和初始化操作
Bird bird = new Bird();
Chicken chicken = new Chicken();
Bird bird2 = new Chicken();//请注意上面这里的区别
bird.ShowType();
chicken.ShowType();
bird2.ShowType();
#endregion
如果你能够了解为什么上面得到的结果,你就深刻理解了什么是继承了
在类库项目(或者其他非Web项目中)有时候需要HttpContext.Current这个方法,我们发现在类里面添加了引用“using System.Web;”之后还是不行,其实解解这个问题很简单,只需要在该项目的“引用”中添加System.Web这个引用就可以了。
另外值得注意的是,在非Web项目中使用HttpContext.Current.Cache、HttpContext.Current.Session等的时候,最好进行判断HttpContext.Current是否为空:
if (HttpContext.Current != null && HttpContext.Current.Session != null)
{
string test = HttpContext.Current.Session["Session"].ToString();
}
这是因为有些情况下Session或者Cache等会被截断,比如在.ashx文件中,默认情况下就会截断Session。当然也可以通过设置在.ashx文件中使用Session,但是为了安全,最后进行判断。
如果要在.ashx文件中使用Session,那么要先引用“using System.Web.SessionState;”,然后继承接口“IRequiresSessionState”,下面是一个例子:
using System;
using System.Data;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Web.SessionState;
namespace Lemon.Life.WebData
{
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Xml : IHttpHandler, IRequiresSessionState
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
context.Session["Test"] = "Test";
string test = context.Session["Test"].ToString();
context.Response.Write("Hello World");
}
public bool IsReusable
{
get
{ return false;}
}
}
}
Miguel de Icaza已成立了一个新的独立公司Xamarin,给Mono一个继续奋斗的机会。
最近的消息称Attachmate公司对Mono框架不再感兴趣,这个消息已经北证实。Mono都创始人Miguel de Icaza终于打破了长久的沉默,透露他已经成立了Xamarin公司来继续支持Mono项目。
Mono团队被Attachmate公司解雇,使Miguel de Icaza非常难过:
一年以来我们一直都想把mono从Novell分离出来,大家一直认为独立成立一个公司将给Mono能带来更光明都未来。
长话短说,分离 Mono都计划没被执行,反而在5月2日加拿大和美国都团队被遣散了,几天后欧洲、巴西和日本团队也不能幸免.这包括MonoTouch和 MonoDroid工程师以及其他主要Mono开发人员。虽然Attachmate公司解散了我们,但只要我们在Novell都一天我们会继续给我们都用 户提供技术支持。
Mono项目有良好的前景,它为Linux以及IOS和Andriod提供C#以及框架支持。然而所有的实现都不是完善的。所以对开发人员都又局限 性。你不能简单快速的把.NET程序移植到Mono,因为缺失相应都框架类以及其它实现,尤其是WPF。同样的,如果使用Mono为iOS或 Andriod写个应用需要学习很多知识,它和在Windows Phone 7建立应用程序的关系不大。
还有在Mono中使用都微软的专利和知识产权问题,微软声称将来可能由于专利和知识产权而导致使用Mono的产生一系列的问题,现在不会对Mono有动作,但将来不见得。很多使用Mono做项目的开源支持者都视之为是个不定时炸-弹。
除了Mono和Moonlight,Xamarin还计划商业产品,既定目标是:
为iOS建立一个新都商业.NET;
为Andriod建立一个新都商业.NET;
继续为Mono和Moonlight贡献和开发;
为Moonlight在移动领域以及苹果Appstore寻求机会;
这两个商业项目需要更多都开发来为潜在的用户提供服务,需要更认真的工作。而且在移动领域以及苹果Appsotre来探索Moonlight的发展 也是件非常有趣的事情。Silerlight并没有成为微软声称的伟大的跨平台的统一者,目前来看貌似微软已经对其失去了兴趣。如果Mono能成为跨平台 的浏览器插件,可能会进一步触发微软的不定时炸-弹爆炸。这当然也不会被苹果所接受,因为这无疑是另一个Flash。
当然一切都归结于资金,如果又足够的资金这个项目或许会有所成就,博客声称已经得到一些资金,而且还有在合同期的工程师们。这听起来比较危险,他们没有足够都资金,只能寄希望于一些勇敢都基金了。
目前看来,Mono的用户都非常支持Miguel de Icaza和他的新公司。在他的博客评论中很多个人表示想投资,但前提是如果自己有钱。但这并不能对这事起到真正都改善作用。关键是.NET社区的反应以及微软的回应。
如果你想帮助Mono,可用访问Xamarin的网站:Xamarin website
Js实现Cookie操作,JavaScript的Cookie操作,源代码
在JavaScript中如何实现Cookie操作呢,下面给出源代码实现:
function SetCookie(name,value,days)
{
if(days == null) days = 30;
var exp = new Date;
exp.setTime(exp.getTime() + days*24*60*60*1000);
document.cookie = name + "="+ escape(value) +";expires="+ exp.toGMTString() + "; path=/";
}
function GetCookie(name)
{
var arr = document.cookie.match(new RegExp("(^ )"+name+"=([^;]*)(;$)"));
if(arr != null) return unescape(arr[2]); return null;
}
这两天要做一个JavaScript的弹出层效果,就是鼠标移动上面的时候弹出一个效果层,移开的时候就消失,网上搜索了一下,得到下面的一段实现代码:
1、JavaScript部分
function $(){return document.getElementById?document.getElementById(arguments[0]):eval(arguments[0]);}
var OverH,OverW,ChangeDesc,ChangeH=50,ChangeW=50;
function OpenDiv(_Dw,_Dh,_Desc) {
$("BigBearLoading").innerHTML="";
OverH=_Dh;OverW=_Dw;ChangeDesc=_Desc;
$("BigBearLoading").style.display='';
if(_Dw>_Dh){ChangeH=Math.ceil((_Dh-10)/((_Dw-10)/50))}else if(_Dw<_dh){changew=math.ceil((_dw-10)/((_dh-10)/50))} top="(document.documentElement.clientHeight-10)/2+" left="(document.documentElement.clientWidth-10)/2+" nw="10,Nh=">OverW-ChangeW)ChangeW=2;
if (Nh>OverH-ChangeH)ChangeH=2;
Nw=Nw+ChangeW;Nh=Nh+ChangeH;
if(OverW>NwOverH>Nh) {
if(OverW>Nw) {
$("BigBearLoading").style.width=Nw+"px";
$("BigBearLoading").style.left=(document.documentElement.clientWidth-Nw)/2+"px";
}
if(OverH>Nh) {
$("BigBearLoading").style.height=Nh+"px";
$("BigBearLoading").style.top=(document.documentElement.clientHeight-Nh)/2+"px"
}
window.setTimeout("OpenNow()",10)
}else{
Nw=10;Nh=10;ChangeH=50;ChangeW=50;
$("BigBearLoading").innerHTML=ChangeDesc;
}
}
function CloseDiv()
{
$("BigBearLoading").style.display="none";
}
2、css部分
body {margin:0px}
#BigBearLoading {position:absolute;z-index:10;left:10px;top:10px;border:1px #666666 solid;background:#eeeeee;width:10px;height:10px}
3、div部分
创建一个span,包含下面的内容:
onmouseover="javascript:OpenDiv(500,300,'有时间请经常来看看大熊工作室噢')" onmouseout="javascript:CloseDiv()" 请用鼠标移动到这里
创建一个div,设置为:
id="BigBearLoading" ondblclick="this.style.display='none'" style="DISPLAY: none"
上一节讲到了类,这次讲对象。一个类可以创建对象,对象可以操作类里面的方法,也可以操作类从父类继承的合法方法,还可以操作其他类的共用方法。
在程序设计(这里都以C#语言为准)中的对象和人类世界中的是类似的,人类世界中每一个人都是一个对象,一个人有自己的姓名、身高等属性,一个人可以做很多事情,也受到很多约束;而程序设计里的对象就是模拟了人类世界的对象,一个对象必须要创建,这个对象在创建之时就确定了它的属性,这个对象可以有很多方法,这个对象受到访问权限的约束。
人类生活在人类社会这个时间里,而对象生存在.NET中的CLR环境;人类在社会里受到法律、风俗等约束,对象在CLR里也同样有着自己的一套约定,比如类型、语法等。
对象最为重要的是:有自己的属性(有如一个人的属性)、有自己可以访问的方法(有如一个人可以做的事情)、访问权限(有如一个人做什么事情受到的权限限制)。
很多时候为了需要,必须使用Session,但是Session过期问题一直困扰很多人,我也是。通过网上的搜索,发现了可以通过两种方式了设置,但是只有一个可以永不过期。
保持Session的方法:
(1)、设Session.timeout=-1,或小于0的数。这种方法肯定是不行的,session计算时间以分钟为单位,必须是大于等于1的整数。
(2)、设Session.timeout=99999。这种同样不行,Session有最大时间限制。
其实,Session最大值为24小时,也就是说你最大可以Session.timeout=1440,1441都是不可以有。
所以想通过设Session.timeout的过期时间让Session永不过期是不可能的。写到Cookies里是比较好的方法,但是Cookie非常的危险,如果在外面的电脑很容易被别人劫持,不安全!
那么有没有一种方法可以保持Session呢,可以使用一种办法,就是在要保持session的页里设隐藏iframe
这个Iframe每隔一段时间刷新一次这个Iframe页面就可以了。
公告栏
欢迎大家来到我的博客,我是dodoro,希望我的博客能给你带来帮助。
最新文章
- 回顾我和编程之缘
2025 年 3 月 25 日 - 委托和接口的选择
2025 年 3 月 5 日 - 部署NextJS到Azure WebApp Deployment Error报错: cannot find module ../server/require-hook
2025 年 2 月 28 日 - 小提琴演奏主要基本功
2024 年 9 月 28 日 - [转]React官网力荐Next.js:为何它取代了Create-React-App?
2024 年 9 月 9 日 - [转]React团队回应用Vite替换Create React App的建议
2024 年 7 月 25 日 - [转]Create React App 入门及 webpack 配置
2024 年 7 月 9 日 - MiniProfiler工具介绍
2024 年 6 月 26 日 - 数据访问策略: Dapper和Entity Framework混合应用
2024 年 6 月 25 日 - Entity Framework Core:一对多关系
2024 年 6 月 23 日 - Entity Framework Core:一对多关系
2024 年 6 月 21 日 - Entity Framework Core:一对一关系
2024 年 6 月 20 日 - 写在第八个父亲节:反思自我少发火
2024 年 6 月 16 日 - 结合使用 ASP.NET Core SignalR 和 Blazor
2024 年 6 月 12 日 - Blazor server VS Blazor WebAssembly
2024 年 6 月 12 日 - git提交或克隆报错fatal: unable to access ‘https://github.com/tata20191003/autowrite.git/‘: Failed to connec
2024 年 6 月 10 日 - EF Add-Migration总结
2024 年 6 月 8 日 - MediatR Official Document
2024 年 6 月 5 日 - [转]MediatR知多少
2024 年 6 月 5 日 - 关于MSBuild和NSwag的深入学习
2024 年 6 月 4 日