一个类怎么可能没有构造函数
本文关键字:怎么可能 构造函数 一个 | 更新日期: 2023-09-27 17:47:24
有一次我问起实例化HttpContext对象的问题。现在我已经学会了我不知道的东西,让我困惑的是你不能说HttpContext ctx=new HttpContext();因为该对象没有构造函数。
但是不是每个类都需要构造函数吗?在C#中,如果不提供,编译器会自动为您提供一个默认的cstr。
此外,如果我有一个字符串(例如:"Hello There!"),并且我说Convert.ToBoolean("Hello")或任何字符串,这是如何工作的?幕后发生了什么?我想像CLR Via C#这样的书在这种情况下会很方便。
我错过了什么?
构造函数可以是私有的,也可以是受保护的
此外,即使抽象类具有公共构造函数,也不能创建该类的实例。
例如,您需要传入一个SimpleWorkerRequest实例,以便初始化HttpContext实例并将其分配给HttpContext。Current:
//Initialize this stuff with some crap
string appVirtualDir = "/";
string appPhysicalDir = @"C:'Documents and Settings'";
string page = @"localhost";
string query = string.Empty;
TextWriter output = null;
//Create a SimpleWorkerRequest object passing down the crap
SimpleWorkerRequest workerRequest = new SimpleWorkerRequest(appVirtualDir, appPhysicalDir, page, query, output);
//Create your fake HttpContext instance
HttpContext.Current = new HttpContext(workerRequest);
有关详细信息,请参阅此链接。
无论如何,有些类没有公共构造函数——比如说一个singleton类,构造函数是私有的(如果它为null,您可以调用静态getInstance方法来获取当前实例或创建它)。
干杯
例如,Singleton没有构造函数,或者至少没有公共构造函数。因此,如果您的类是单例,而不是编写
MyClass c = new MyClass();
你会写
MyClass c = MyClass.getInstance();
您有3个问题。。。
HttpContext;它实际上有两个公共构造函数,但实际上不希望使用它们。在更通用的术语中,您可以使用非默认构造函数,如:MyType foo = new MyType("abc");
。
缺少构造函数已经很好地涵盖了,但没有:abstract
/static
是最简单的,但也没有必要有公共构造函数。
ToBoolean在场景中,这将在道义上等效于bool.Parse("Hello")
,它只是检查已知的字符串,特别是"True"answers"False"(使用OrdinalIgnoreCase,处理了null/training/etc)。
我相信HttpContext构造函数已被标记为private。这意味着你不能自己实例化它。.net框架在幕后为您创建一个。。。
看看Singleton设计模式。
用一个词来说:静态。
否则,类可能会在内部或私下实例化(Factory或Singleton)
Signleton:
Class A{
public static readonly A Instance = new A();
private A()
{
}
}
如果将构造函数设为私有,则无法从外部初始化类。但在班里,这是可能的。因此,您可以提供一个返回类实例的静态方法。singleton模式就是基于此。
编译器不创建类的默认构造函数,直到该类具有带参数的构造函数为止。在HttpContext类中,它有2个带参数的构造函数。所以,当您执行HttpContext obj=new HttpContext()时,会显示错误。
public class Sample
{
int x;
public Sample (int x)
{
x = 2;
}
}
public class Program
{
static void Main(string[] args)
{
Sample s = new Sample();//error is shown
}
}
当您删除Sample类的上述构造函数时,不会出现错误,因为编译器会创建默认构造函数(没有参数的构造函数)。