在c#中声明没有括号的函数

时间:2015-10-02 00:02:20

标签: c# function singleton parentheses

我见过一个使用没有括号的函数的单例代码。我想知道没有括号的函数和带有不带参数的括号的函数之间有什么区别。 代码public static MySingleton Instance中没有括号:
(顺便说一下代码是统一并用 c#写的)

public class MySingleton
{
    private static MySingleton instance;

    public MySingleton ()
    {
        if (instance != null)
        {
            Debug.LogError ("Cannot have two instances of singleton.");
            return;
        }
        instance = this;
    }

    public static MySingleton Instance
    {
        get
        {
            if (instance == null)
            {
                new MySingleton ();
            }
        return instance;
        }
    }
}

2 个答案:

答案 0 :(得分:2)

public static MySingleton Instance不是一种方法,而是Property

MSDN文档

  

属性是一种成员,它提供了一种灵活的机制来读取,写入或计算私有字段的值。属性可以像它们是公共数据成员一样使用,但它们实际上是称为访问器的特殊方法。这样可以轻松访问数据,并且仍然有助于提高方法的安全性和灵活性。

使用属性,您可以将私有成员的访问权限授予外部代码。如果您只提供“获取”访问权限,则只能进行读取操作。

在这里,您将私有成员的实例公开为属性。

答案 1 :(得分:2)

虽然它们似乎都是相同的,但它们实际上是两个不同的东西。

MySingleton()是一种方法。 (不注意的谦卑检查)

Method是代码块,可能有也可能没有参数,当被调用时,它们将执行任何包含代码并返回一个对象或无效。

MySingleton InstanceProperty。属性允许对类/结构中的对象进行get / set访问。

虽然理论上你可以用它们做类似的事情,这取决于你如何使用它们;目的是完全不同的。

在旁注中,构造函数MySingletion()应该是典型的Singleton模式中的私有。你可以看到Skeet先生对单身here的一些不同的实现。