Почему неправильный код генерируется Linq-to-SQL, но при компиляции ошибки нет - PullRequest
1 голос
/ 27 октября 2011

Я использую Linq-to-SQL, который будет генерировать классы для таблиц базы данных, перетаскиваемых в конструктор. Когда я перетаскиваю Product таблицу в конструктор, Visual Studio сгенерирует так:

[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.Products")]
public partial class Product : INotifyPropertyChanging, INotifyPropertyChanged
{
    // ...
    partial void OnProductIDChanging(int value);
    partial void OnProductIDChanged();

    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ProductID", AutoSync=AutoSync.OnInsert, DbType="Int NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]
    public int ProductID
    {
        get
        {
            return this._ProductID;
        }
        set
        {
            if ((this._ProductID != value))
            {
                this.OnProductIDChanging(value);
                this.SendPropertyChanging();
                this._ProductID = value;
                this.SendPropertyChanged("ProductID");
                this.OnProductIDChanged();
            }
        }
    }
     //...
}

OnProductIDChanging и OnProductIDChanged не являются абстрактными методами и они пусты, но не дают ошибки компиляции. Спасибо.

Ответы [ 2 ]

3 голосов
/ 27 октября 2011

Потому что они частичные методы .Из MSDN:

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

2 голосов
/ 27 октября 2011

Потому что они являются частичными методами.

Эта статья содержит очень хорошее объяснение частичных методов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...