T 方法语法

T Method Syntax

我正在探索 nopCommerce 4.0 源代码,但很难理解其流行的本地化方法“@T()”的语法。

调用该方法的方式类似于@T("Products.FreeShipping"),它应return本地化字符串。

T() 是遵循 C# 语法的方法吗?如果它是 C# 方法,为什么它没有像 "public Lozalizer T(string parameter1)" 模式这样的方法签名?

并且它在 T() 方法下使用 "get { ... }" 语句,在我看来这更像是 C# 中的获取访问器模式,这怎么可能?

我在 "NopRazorPage" class 下找到它的实现如下:

    public Localizer T
    {
        get
        {
            if (_localizationService == null)
                _localizationService = EngineContext.Current.Resolve<ILocalizationService>();

            if (_localizer == null)
            {
                _localizer = (format, args) =>
                {
                    var resFormat = _localizationService.GetResource(format);
                    if (string.IsNullOrEmpty(resFormat))
                    {
                        return new LocalizedString(format);
                    }
                    return new LocalizedString((args == null || args.Length == 0)
                        ? resFormat
                        : string.Format(resFormat, args));
                };
            }
            return _localizer;
        }
    }

Localizer 类型不是 class 类型,而是 delegate 类型。委托是对函数的引用,它们可以被赋予函数引用,并且可以作为函数被调用。在您发布的代码中,分配给 _localizer 的值是 _localizer = (format, args) => {... },这是匿名函数的语法。这就是为什么你可以像函数一样调用它,但它看起来像 属性.

有关委托的更多详细信息,请参阅 here and for anonymous methods see here