0

Как исправить статический класс, чтобы не ругался?

Код написан для VS2017, а у меня стоит VS2013 и .NET Framework 4.5.2, соответственно я так предполагаю, что не поддерживается новый синтаксис.

Ругается на "Недопустимая лексема "=" в объявлении класса, структуры или интерфейса":

public static class InterpolationAlgorithms 
{ 
    /// <summary> 
    /// Canonical spline, also known as Cardinal spline. 
    /// </summary> 
    public static IInterpolationAlgorithm CanonicalSpline { get; } = new CanonicalSpline(0.5); 
}
VladD
  • 206,799
DHel
  • 31
  • что и чему вы пытаетесь присвоить? – Sublihim Feb 12 '18 at 13:07
  • Какая у вас версия языка? Проблема, очевидно, не в том, что класс статический. – VladD Feb 12 '18 at 13:17
  • @VladD, он уже задавал один вопрос, подобный – Grundy Feb 12 '18 at 13:19
  • Библиотека написана на VS2017, а у меня VS2013 и .NETFramework 4.5.2. Соответственно такой синтаксис не поддерживается. – DHel Feb 12 '18 at 13:19
  • @Grundy: Ну не должны же все отвечающие следить за всеми вопросами? – VladD Feb 12 '18 at 13:30
  • @VladD, это мне просто совсем недавно попадался. Подозреваю будет еще несколько подобных вопросов :-) – Grundy Feb 12 '18 at 13:32
  • @VladD, а у нас не было какого-то общего вопроса по новым фичам c# ? вроде было что-то подобное? – Grundy Feb 12 '18 at 13:33
  • 1
    @Grundy: Это я к тому, что ТС должен бы писать эту важную информацию в каждом своём вопросе, не надеясь, что мы все прочитаем все его вопросы в хронологическом порядке. – VladD Feb 12 '18 at 13:33
  • @Grundy: Общего на все версии я не помню. По какой-то одной версии был. – VladD Feb 12 '18 at 13:39
  • @VladD, ну вот на тот момент последней и был, только не помню было там что-то про свойства или нет. Кстати! Может стоит обновить общий вопрос про свойства? Я про вот этот – Grundy Feb 12 '18 at 13:40
  • @Grundy: Тот, который об отличиях свойства от поля? Он вроде и так перегружен, эта информация туда уже не лезет, боюсь. – VladD Feb 12 '18 at 13:42

2 Answers2

2

Попробуйте инициализировать из статического конструктора

public static class InterpolationAlgorithms 
{
    /// <summary> 
    /// Canonical spline, also known as Cardinal spline. 
    /// </summary> 
    public static IInterpolationAlgorithm CanonicalSpline { get; }
    static InterpolationAlgorithms()
    {
       CanonicalSpline = new CanonicalSpline(0.5);
    }
}
yolosora
  • 4,217
  • присваивать значение свойствам только для чтения в конструкторе, разрешили тоже не так давно. – Grundy Feb 12 '18 at 13:23
  • До такого варианта я и сама догадалась, но не работает пока что. Теперь другая ошибка: InterpolationAlgorithms.CanonicalSpline.get должен декларировать тело, так как оно не отмечено как абстрактное или внешнее. Автоматически реализованные свойства должны определять функции доступа get и set. – DHel Feb 12 '18 at 13:30
  • И еще стало ругаться на сам класс CanonicalSpline

    public class CanonicalSpline : IInterpolationAlgorithm

    {

    ///

    /// The tension. ///

    public double Tension { get; } }

    CanonicalSpline.Tension.get должен декларировать тело, так как оно не отмечено как абстрактное или внешнее. Автоматически реализованные свойства должны определять функции доступа get и set.

    – DHel Feb 12 '18 at 13:30
  • @DHel: Ну добавьте private set;. – VladD Feb 12 '18 at 13:31
  • Спасибо. Скомпилилось. Буду сейчас проверять работу. – DHel Feb 12 '18 at 13:36
2

Данный пример показывает использование инициализации свойства только для чтения.

В ранних версиях языка аналогом может служить следующий код:

public static class InterpolationAlgorithms 
{ 
    private static readonly IInterpolationAlgorithm  _canonicalSpline; 
    static InterpolationAlgorithms () {
        _canonicalSpline = new CanonicalSpline(0.5); 
    }
    /// <summary> 
    /// Canonical spline, also known as Cardinal spline. 
    /// </summary> 
    public static IInterpolationAlgorithm CanonicalSpline { 
        get {
            return _canonicalSpline;
        }
    }
}
Grundy
  • 81,538
  • Тогда уже private static readonly? – VladD Feb 12 '18 at 13:36
  • @VladD, конкретно в данном примере - не принципиально. Кроме конструктора это поле нигде меняется. В более общем случае оно может быть как нужным так и нет. Хотя да, идея нового синтаксиса свойства в единственной инициализации. – Grundy Feb 12 '18 at 13:38