ASP.NET私有构造函数作用

一、私有构造函数的特性

1、一般构造函数不是私有或者保护成员,但构造函数可以使私有成员函数,在一些特殊的场合,会把构造函数定义为私有或者保护成员。

2、私有构造函数是一种特殊的实例构造函数。它通常用在只包含静态成员的类中。如果类具有一个或多个私有构造函数而没有公共构造函数,则不允许其他类(除了嵌套类)创建该类的实例。

3、私有构造函数的特性也可以用于管理对象的创建。虽然私有构造函数不允许外部方法实例化这个类,但却允许此类中的公共方法(有时也称为工厂方法,factory method)创建对象。也就是说,类可以创建自身的实例、控制外界对它的访问,以及控制创建的实例个数

二、私有构造函数作用实例说明

1、带私有构造函数的类不能被继承

在Animal类中声明一个私有构造函数,让Dog类来继承Animal类。

C# 代码   复制


   public class Animal
 {
   private Animal()
   {       Console.WriteLine("i am animal");

   }
 }  

 public class Dog : Animal  {
 }

运行程序,生成解决方案,报错如下图所示:

2、带私有构造函数的类不能被实例化

运行如下测试代码:

C# 代码   复制


   class Program
 {
   static void Main(string[] args)
   {
     Animal animal = new Animal();
   }
 }

 public class Animal
 {
   private Animal()
   {
     Console.WriteLine("i am animal");
   }
 }

程序运行后生成解决方案,报错如下图所示:

三、私有构造函数的应用

有些时候,我们不希望一个类被过多地被实例化,比如有关全局的类、路由类等。这时候,我们可以为类设置构造函数并提供静态方法。

C# 代码   复制


  public class PrivateConClass
{
    private static PrivateConClass pcc;
    private PrivateConClass()
    {
        Console.WriteLine("This private constructure function. So you cannot create an instance of this class.");
    }
    public static PrivateConClass CreatePcc()
    {
        pcc = new PrivateConClass();
        return pcc;
    }
    public static void ShowStaticMethod()
    {
        Console.WriteLine("This is a static method. Just be called by Class name.");
    }
    public void ShowMethod()
    {
        Console.WriteLine("This is a Nonstatic method. Just be called by private static instance pcc.");
    }
}

class Program
{
    static void Main(string[] args)
    {
        PrivateConClass pcc = PrivateConClass.CreatePcc();
        pcc.ShowMethod();
        PrivateConClass.ShowStaticMethod();
    }
}
时间: 2024-10-08 02:48:43

ASP.NET私有构造函数作用的相关文章

c#基础——类中私有构造函数作用

如果类成员有private修饰符,就不允许在类范围以外访问这个类成员.对类构造函数应用private修饰符时,则禁止外部类创建该类的实例.尽管看上去有些不好理解(既然不能实例化,那么这个类还有什么用处?),但实际上这是一个功能极其强大的特性. 最明显的是,如果类只通过静态方法和字段来提供功能,那么就常常使用私有构造函数.框架类库FCL中System.Math类就是一个很经典的例子. System.Math类有两个静态字段:pi和e(自然对数底数),还有一些返回三角函数值的方法.这些方法都作为内置

C#基础(五)——类中私有构造函数作用

如果类成员有private修饰符,就不允许在类范围以外访问这个类成员.对类构造函数应用private修饰符时,则禁止外部类创建该类的实例.尽管看上去有些不好理解(既然不能实例化,那么这个类还有什么用处?),但实际上这是一个功能极其强大的特性. 最明显的是,如果类只通过静态方法和字段来提供功能,那么就常常使用私有构造函数.框架类库FCL中System.Math类就是一个很经典的例子. System.Math类有两个静态字段:pi和e(自然对数底数),还有一些返回三角函数值的方法.这些方法都作为内置

java中私有构造函数的作用

1. 强调类的单例模式 public class Elvs { //公有的静态域,来说明该类只能有一个实例(实例化一次后,后面都是同一个实例) public static final Elvs INSTANCE=new Elvs(); private Elvs(){}//将构造函数定义为私有变量后,就不能在外部去调用构造函数实例化类了 public void sys() { System.out.println("******"); } } public class Main { pu

C++之保护和私有构造函数与析构函数

一.构造函数 1.保护 构造函数定义为protected后,就意味着你不能在类的外部构造对象了,而只能在外部构造该类的子类的对象,比如: class Base { protected: Base() {} ... }; class Derived : public Base { public: Derived() {} ... }; Base b; //error Derived d; //ok 2.私有 构造函数定义为private后,意味着不仅仅不能在类的外部构造对象了,而且也不能在外部构造

Java私有构造函数不能阻止继承

下面是一个调用已经私有化的单列的函数的列子. 这里用了静态内部类,关键就是静态内部类可以访问外部类的私有构造函数. 这种算是变种继承吧.前提是可以在原来的单列类里添加代码. class Single { private Single(){                System.out.println("Single");        }                public void runSingleMethod()        {                Sy

编程算法 - 不能被继承的类(私有构造函数) 代码(C++)

不能被继承的类(私有构造函数) 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 用C++设计一个不能被继承的类. 可以使用私有构造函数, 并提供静态成员函数, 返回和删除类的实例. 则只能在堆上创建实例, 不能在栈上创建. 代码: /* * main.cpp * * Created on: 2014.7.13 * Author: Spike */ #include <iostream> #include <list> us

ASP.NET machineKey的作用和使用方法

ASP.NET machineKey的作用 如果你的Asp.Net程序执行时碰到这种错误:“验证视图状态 MAC 失败.如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法.不能在群集中使用 AutoGenerate.”那么说明你没有让你的应用程序使用统一的machineKey,那么machineKey的作用是什么呢?按照MSDN的标准说法:“对密钥进行配置,以便将其用于对 Forms 身份验证 Cookie 数据和视图状

私有构造函数

通常我们都将构造函数的声明置于public区段,假如我们将其放入private区段中会发生什么样的后果? 我们知道,当我们在程序中声明一个对象时,编译器调用构造函数(如果有的话),而这个调用将通常是外部的,也就是说它不属于class对象本身的调用,假如构造函数是私有的,由于在class外部不允许访问私有成员,所以这将导致编译出错. 你于是说:“哈哈.”我们制造了一个似乎无法产生对象的class.哦,当然,对于class本身,我们还可以利用它的static公有成员,因为它们独立于class对象之外

私有构造函数(C# 编程指南)

私有构造函数是一种特殊的实例构造函数.它通常用在只包含静态成员的类中.如果类具有一个或多个私有构造函数而没有公共构造函数,则其他类(除嵌套类外)无法创建该类的实例.例如: C# class NLog { // Private Constructor: private NLog() { } public static double e = Math.E; //2.71828... } 声明空构造函数可阻止自动生成默认构造函数.注意,如果您不对构造函数使用访问修饰符,则在默认情况下它仍为私有构造函数