Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ColdFusion中静态方法的等价物是什么?_C#_Coldfusion_Static_Coldfusion 9 - Fatal编程技术网

C# ColdFusion中静态方法的等价物是什么?

C# ColdFusion中静态方法的等价物是什么?,c#,coldfusion,static,coldfusion-9,C#,Coldfusion,Static,Coldfusion 9,在C#中,我创建了静态方法来帮助我执行简单的操作。例如: public static class StringHelper { public static string Reverse(string input) { // reverse string return reversedInput; } } 然后在控制器中,我只需使用以下命令调用它: StringHelper.Reverse(input); 现在我使用ColdFusion和

在C#中,我创建了静态方法来帮助我执行简单的操作。例如:

public static class StringHelper
{
    public static string Reverse(string input)
    {
        // reverse string
        return reversedInput;
    }
}
然后在控制器中,我只需使用以下命令调用它:

StringHelper.Reverse(input);
现在我使用ColdFusion和Model Glue,我想做同样的事情。然而,在ColdFusion中似乎没有静态方法的概念。如果我创建这样的CFC:

component StringHelper
{
    public string function Reverse(string input)
    {
        // reverse string
        return reversedInput;
    }
}
component Controller
{
    public void function Reverse()
    {
        var input = event.getValue("input");
        var stringHelper = new StringHelper();
        var reversedString = stringHelper.Reverse(input);
        event.setValue("reversedstring", reversedString);
    }
}
我只能通过在控制器中创建
StringHelper
的实例来调用此方法,如下所示:

component StringHelper
{
    public string function Reverse(string input)
    {
        // reverse string
        return reversedInput;
    }
}
component Controller
{
    public void function Reverse()
    {
        var input = event.getValue("input");
        var stringHelper = new StringHelper();
        var reversedString = stringHelper.Reverse(input);
        event.setValue("reversedstring", reversedString);
    }
}

或者我可以在某个地方放置“静态”CFC,框架将在幕后创建一个实例,这样我就可以像使用静态一样使用它,就像helpers文件夹是如何工作的一样?

不,你是对的,ColdFusion中没有静态方法的概念。我认为大多数人会通过在应用程序启动时创建的应用程序范围中使用单例实用程序来解决这个问题。因此,在onApplication start中的App.cfc中,您可能有:

<cfset application.StringHelper = createObject("component", "path.to.StringHelper") />

然后,当您需要从任何地方调用它时:

<cfset reversedString = application.StringHelper.reverse(string) />


是的,它不像静态方法那么干净。也许有一天我们会有类似的东西。但现在我认为这是你能得到的最接近的

在ColdFuison中创建静态的一种方法是将函数或变量放入对象的元数据中。这并不完美,但就像静态调用一样,您不必创建对象的实例来调用它们,它们将一直持续到服务器重新启动,因此在第一次调用后它们会非常快

下面是一个简短的片段:

component name="Employee"
{
 public Employee function Init(){
  var metadata = getComponentMetaData("Employee"); 

  if(!structKeyExists(metadata,"myStaticVar")){

   lock name="metadata.myStaticVar" timeout="10"{
    metadata.myStaticVar = "Hello Static Variable."; 
   }
  }

  return this;
 }
}

更多详情请参见:.

+1示例方法。记住,ColdFusion根本不是面向对象的语言。我们让它看起来像OOP。您使用的是模型胶,所以大部分内容只在cfc中使用,而在cfc中使用cfscript时,我们完全忘记了ColdFusion是一种脚本语言,与PHP和经典ASP一样!说ColdFusion根本不是面向对象的是不对的。它不是完全面向对象的(一切都是对象),但您可以使用它以面向对象的方式编程,使用面向对象的概念、OO设计模式等等。它是面向对象的。可以在元数据中放入函数还是只放入变量?