mikebai.com

  • Home
  • dev
  • DotNET
  • M365
  • 搞笑
  • 杂七杂八
  • FocusDict
DotNET
DotNET

[转载]解决IIS文件无法下载的问题

服务器新增网络硬盘功能,为了方便,在上传的时候根据分类建立了相应的文件夹(自动创建)并保留原上传文件的文件名。[文件夹和文件均为可能为中文]问题出现了。上传很正常,也都保留在服务器上了。可是下载的时候却总是提示文件不存在。而且是部分文件不能下载,而不是所有。以为是中文的问题,按网上资料修改注册表,仍然未能解决。相应的文件在我的电脑上却都能下载(xp系统)郁闷了。。。。后来,我发现了规律,不能下载的文件都是7z格式(winrar在单位不给用,版权问题)我想,会不会是IIS不能识别7z格式的文件而不让下载呢?如果是,那我应该给IIS添加7z格式阿。果然给IIS的“文件类型”(MIME映射) 添加7z格式,问题解决添加以下信息:扩展名: .7zMIME:7z

2007-02-27 0comments 113hotness 0likes mikebai Read all
DotNET

抽象类、密封类(sealed和abstract)

使用 abstract 关键字可以创建仅用于继承用途的类和类成员,即定义派生的非抽象类的功能。使用 sealed 关键字可以防止继承以前标记为 virtual 的类或某些类成员。 抽象类和类成员 可以将类声明为抽象类。方法是在类定义中将关键字 abstract 置于关键字 class 的前面。例如: public abstract class A {   // Class members here. } 抽象类不能实例化。抽象类的用途是提供多个派生类可共享的基类的公共定义。例如,类库可以定义一个作为其多个函数的参数的抽象类,并要求程序员使用该库通过创建派生类来提供自己的类实现。 抽象类也可以定义抽象方法。方法是将关键字 abstract 添加到方法的返回类型的前面。例如: public abstract class A {   public abstract void DoWork(int i); } 抽象方法没有实现,所以方法定义后面是分号,而不是常规的方法块。抽象类的派生类必须实现所有抽象方法。当抽象类从基类继承虚方法时,抽象类可以使用抽象方法重写该虚方法。例如: // compile with: /target:library public class D {   public virtual void DoWork(int i)   {    // Original implementation.   } } public abstract class E : D {   public abstract override void DoWork(int i); } public class F : E {   public override void DoWork(int i)   {    // New implementation.   } } 如果将虚方法声明为抽象方法,则它对于从抽象类继承的所有类而言仍然是虚的。继承抽象方法的类无法访问该方法的原始实现。在前面的示例中,类 F 上的 DoWork 无法调用类 D 上的 DoWork。在此情况下,抽象类可以强制派生类为虚方法提供新的方法实现。 密封类和类成员 可以将类声明为密封类。方法是在类定义中将关键字 sealed 置于关键字 class 的前面。例如: public sealed class D {   // Class members here. } 密封类不能用作基类。因此,它也不能是抽象类。密封类主要用于防止派生。由于密封类从不用作基类,所以有些运行时优化可以使对密封类成员的调用略快。 在对基类的虚成员进行重写的派生类上的类成员、方法、字段、属性或事件可以将该成员声明为密封成员。在用于以后的派生类时,这将取消成员的虚效果。方法是在类成员声明中将 sealed 关键字置于 override 关键字的前面。例如: public class D : C {   public sealed override void DoWork() { } }

2007-01-11 0comments 105hotness 0likes mikebai Read all
DotNET

abstract C#使用

abstract 修饰符可以和类、方法、属性、索引器及事件一起使用。在类声明中使用 abstract 修饰符以指示某个类只能是其他类的基类。标记为抽象或包含在抽象类中的成员必须通过从抽象类派生的类来实现。在此例中,类 Square 必须提供 Area 的实现,因为它派生自 ShapesClass: abstract class ShapesClass{  abstract public int Area();}class Square : ShapesClass{  int x, y;  // Not providing an Area method results  // in a compile-time error.  public override int Area()  {     return x * y;  }}抽象类具有以下特性:抽象类不能实例化。抽象类可以包含抽象方法和抽象访问器。不能用 sealed修饰符修改抽象类,这意味着抽象类不能被继承。从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实实现。在方法或属性声明中使用 abstract 修饰符以指示方法或属性不包含实现。抽象方法具有以下特性:抽象方法是隐式的虚方法。只允许在抽象类中使用抽象方法声明。因为抽象方法声明不提供实际的实现,所以没有方法体;方法声明只是以一个分号结束,并且在签名后没有大括号 ({ })。例如: 复制代码 public abstract void MyMethod();实现由一个重写方法提供,此重写方法是非抽象类的成员。在抽象方法声明中使用 static 或 virtual 修饰符是错误的。 除了在声明和调用语法上不同外,抽象属性的行为与抽象方法一样。在静态属性上使用 abstract 修饰符是错误的。在派生类中,通过包括使用 override 修饰符的属性声明,可以重写抽象的继承属性。 抽象类必须为所有接口成员提供实现。 实现接口的抽象类可以将接口方法映射到抽象方法上。例如:复制代码 interface I {  void M();}abstract class C: I {  public abstract void M();}示例在本例中,DerivedClass 类是从抽象类 BaseClass 派生的。抽象类包含一个抽象方法 AbstractMethod 和两个抽象属性 X 和 Y。// Abstract Classesusing System;abstract class BaseClass // Abstract class{  protected int _x = 100;  protected int _y = 150;  public abstract void AbstractMethod(); // Abstract method  public abstract int X { get; }  public abstract int Y { get; }}class DerivedClass : BaseClass{  public override void AbstractMethod()  {    _x++;    _y++;  }  public override int X // overriding property  {   get   {    return _x + 10;   }  }  public override int Y // overriding property  {   get   {    return _y + 10;   }  }  static void Main()  {   DerivedClass o = new DerivedClass();   o.AbstractMethod();   Console.WriteLine("x = {0}, y = {1}", o.X, o.Y);  }}输出x = 111, y = 161注释在上面的示例中,如果试图通过使用下面的语句将抽象类实例化:复制代码 BaseClass bc = new BaseClass(); // Error将出现错误,指出编译器无法创建抽象类“BaseClass”的实例。

2007-01-11 0comments 114hotness 0likes mikebai Read all
DotNET

如何调用VS自带的数据源选择对话框

    在实际的开发中,为了方便软件的部署我们常常需要让客户手动的选择数据源和数据连接信息。当然我们可以将这些信息写在XML的配置文件里.但是客户并不是专业的编程人员,一不小心就会使连接串写错,导致系统无法运行,最好是让用户能够通过一个图形界面来选择,如下图:这样子,既方便,有不容易出问题。下来我们就看看怎么实现。我的思路就是调用VS自带的工具,由于没有相关的文档,只有通过反汇编了。先添加对Microsoft.Data.ConnectionUI.Dialog.dll的引用,这个assmbly在你的VS2005的安装目录下具体是在D:\Program Files\Microsoft Visual Studio 8\Common7\IDE下边,我的VS安装在D盘,大家可以根据情况去找,调用很简单,下面是代码:       using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using Microsoft.Data.ConnectionUI;namespace testConnectionStringUI{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){DataConnectionDialog dlg = new DataConnectionDialog();dlg.DataSources.Add(DataSource.SqlDataSource);if (DataConnectionDialog.Show(dlg, this) == DialogResult.OK){textBox1.Text = dlg.ConnectionString;}}}} 解释一下这段很简单的代码,我创建了一个WindowsApplication,其中有一个窗体,在窗体上放置了一个TextBox和一个Button控件,在Button的点击事件里添加数据源选择对话框的调用。DataConnectionDialog 的调用比较有意思,虽然DataConnectionDialog提供了Show和ShowDialog实例方法,但是你却不能调用,你只能调用Show静态方法,Show方法有两个重载版本: public static DialogResult Show(DataConnectionDialog dialog); public static DialogResult Show(DataConnectionDialog dialog, IWin32Window owner); public static DialogResult Show(DataConnectionDialog dialog){return DataConnectionDialog.Show(dialog, null);}下边是第二个方法的实现: public static DialogResult Show(DataConnectionDialog dialog, IWin32Window owner){DialogResult result2;if (dialog == null){throw new ArgumentNullException("dialog");}if (dialog.DataSources.Count == 0){throw new InvalidOperationException(SR.GetString("DataConnectionDialog_NoDataSourcesAvailable"));}foreach (DataSource source1 in dialog.DataSources){if (source1.Providers.Count == 0){throw new InvalidOperationException(SR.GetString("DataConnectionDialog_NoDataProvidersForDataSource", new object[] { source1.DisplayName.Replace(" ", " ") }));}}Application.ThreadException += new ThreadExceptionEventHandler(dialog.HandleDialogException);dialog._showingDialog = true;try{DialogResult result1;if ((dialog.SelectedDataSource == null) || (dialog.SelectedDataProvider == null)){DataConnectionSourceDialog dialog1 = new DataConnectionSourceDialog(dialog);dialog1.Title = dialog.ChooseDataSourceTitle;dialog1.HeaderLabel = dialog.ChooseDataSourceHeaderLabel;(dialog1.AcceptButton as Button).Text = dialog.ChooseDataSourceAcceptText;if (dialog.Container != null){dialog.Container.Add(dialog1);}try{if (owner == null){dialog1.StartPosition = FormStartPosition.CenterScreen;}dialog1.ShowDialog(owner);if ((dialog.SelectedDataSource == null) || (dialog.SelectedDataProvider == null)){return DialogResult.Cancel;}goto Label_015B;}finally{if (dialog.Container != null){dialog.Container.Remove(dialog1);}dialog1.Dispose();}}dialog._saveSelection = false;Label_015B:if (owner == null){dialog.StartPosition = FormStartPosition.CenterScreen;}Label_0165:result1 = dialog.ShowDialog(owner);if (result1 == DialogResult.Ignore){DataConnectionSourceDialog dialog2 = new DataConnectionSourceDialog(dialog);dialog2.Title = dialog.ChangeDataSourceTitle;dialog2.HeaderLabel = dialog.ChangeDataSourceHeaderLabel;if (dialog.Container != null){dialog.Container.Add(dialog2);}try{if (owner == null){dialog2.StartPosition = FormStartPosition.CenterScreen;

2006-12-11 0comments 143hotness 0likes mikebai Read all
1…1213141516

Recent Posts

  • c# winform适配高dpi
  • com.microsoft.sqlserver.jdbc.SQLServerException “trustServerCertificate”属性设置为“false”,但驱动程序无法使用安全套接字层 (SSL) 加密与 SQL Server建立安全连接
  • java -cp 用法介绍
  • HTML 容器元素
  • MVC的cshtml的介绍

Recent Comments

No comments to show.

COPYRIGHT © 2025 mikebai.com. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang