Частичные конструкторы класса

Вы не можете использовать этот оператор с нулевым распространением.

Этот оператор позволяет распространять нули при вычислении выражения. Он не может использоваться в качестве цели назначения точно так, как предполагает ошибка.

Вам нужно придерживаться простой старой нулевой проверки:

if (a != null)
{
    a.Value = someValue;
}
30
задан AndreyAkinshin 16 October 2009 в 21:52
поделиться

3 ответа

C # поддерживает особенность частичных методов . Это позволяет частичному определению класса пересылать объявление метода, который затем может опционально определить другая часть частичного класса.

Частичные методы имеют некоторые ограничения:

  • они ДОЛЖНЫ быть типа void (без возврата)
  • они НЕ МОГУТ принимать параметры, однако они могут принимать параметры ref
  • они НЕ МОГУТ быть виртуальными или внешними и НЕ МОГУТ переопределять или перезаписывать другой метод (с помощью ключевого слова «new»)

Частичные методы неявно запечатаны и закрыты.

Однако невозможно, чтобы две разные части частичного класса реализовывали один и тот же частичный метод. Обычно частичные методы используются в сгенерированных кодом частичных классах как способ позволить не сгенерированной части расширять или настраивать поведение сгенерированной части (или иногда наоборот). Если частичный метод объявлен, но не реализован ни в одной части класса, компилятор автоматически исключит любые вызовы к нему.

Вот пример кода:

 public partial class PartialTestClass
 {
     partial void DoSomething();

     public PartialTestClass() { DoSomething(); }
 }

 public partial class PartialTestClass
 {
     partial void DoSomething()  { /* code here */ }
 }
51
ответ дан Community 11 October 2019 в 13:20
поделиться

Поиск «частичных методов». Они будут делать именно то, что вы хотите.

Например:

public partial class Test
{
    public Test()
    {
         //do stuff

         DoExtraStuff();
    }

    partial void DoExtraStuff();
}


public partial class Test // in some other file
{
     partial void DoExtraStuff()
     {
         // do more stuff
     }
}
6
ответ дан Neil 11 October 2019 в 13:20
поделиться

Well, in C# 3.0 you can have what are called partial methods - method that can be called, even if they're not really there.

If they're not defined in any of the partial class files, the call to them will be removed by the .NET compiler/linker.

So you could define e.g. a Customer class:

partial class Customer
{
  string name;

  public string Name
  {
    get
    {
      return name;
    }
    set
    {
      OnBeforeUpdateName();
      OnUpdateName();
      name = value;
      OnAfterUpdateName();
    }
  }

  partial void OnBeforeUpdateName();
  partial void OnAfterUpdateName();
  partial void OnUpdateName();
}

Those partial methods OnBeforeUpdateName() etc. will be called but if your none of the partial class files actually does implement anything for them, that call will be without any effect. Linq-to-SQL uses this big time for these kind of notification methods.

See those blog posts on partial methods:

Marc

8
ответ дан 27 November 2019 в 18:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: