2016-07-12 8 views
2

У меня есть частичный класс с конструктором, но конструктор бросает ошибку, потому что «член с той же сигнатурой уже объявлен» (конструктор с тем же именем существует в другом частичном классе). Как создать конструктор для частичного класса, когда имя уже используется?.Net Как создать конструктор для частичного класса?

public partial class DigitalArchivesAssetsDataContext 
{ 
    public DigitalArchivesAssetsDataContext() 
     : base(System.Configuration.ConfigurationManager.ConnectionStrings["digitalArchivesAssets"].ConnectionString, mappingSource) 
    { 
     OnCreated(); 
    } 
} 
+2

Если подпись конструктора такая же, зачем она нужна в двух разных частичных классах? В конечном счете частичные классы будут скомпилированы так, как если бы они были написаны в одном классе. – keyboardP

+0

У вас нет дубликатов в вашем классе. Частично это не что иное, как позволить компилятору компилировать класс из нескольких файлов, но применяются одни и те же принципы кодирования, в том числе не имеющие повторяющихся членов (включая конструкторы). – Igor

+0

Является ли метод, который вы показываете в своем коде, существующий метод или то, что вы пытаетесь добавить? Если его уже существует, то целью этого является использование «OnCreated» для добавления вашего настраиваемого кода, который вы хотите выполнить при вызове конструктора. Если это так, то это, вероятно, либо частичный метод, событие, либо виртуальный метод, который вы можете переопределить. – Igor

ответ

4

Вы не можете. Компилятор по существу объединяет текст всех частичных классов вместе в один класс при построении проекта. У вас не может быть более одного метода (включая конструкторы) с тем же именем и подписи для каждого класса.

Одним из вариантов является использование другой подписи для конструктора или изменение архитектуры без необходимости в конструкторе. Например, вы можете использовать существующий конструктор и иметь какой-то метод Initialize, который запускает код из вашего другого конструктора.

Вы также можете использовать «Частичные методы». Это методы, отмеченные как partial, которые вы могли бы вызвать из существующего конструктора «если они существуют». Они разработаны как точки расширения для частичных классов, которые поступают из генератора кода, но вы также можете использовать их. См. MSDN для получения дополнительной информации.

+0

Спасибо! Я понял, что мне просто нужно удалить повторяющиеся методы, поскольку мне только нужно, чтобы они существовали один раз. –

3

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

class ClassRoom 
{ 
private int boycount; //field 
public ClassRoom()  //default constructor 
{ 
    boycount = 30; 
} 
public ClassRoom(int bcount)  //overloaded constructor 
{ 
    boycount = bcount; 
} 
public double Avg()  //method 
{ 
    //statements goes here 
} 
} 

В приведенном выше примере мы можем разделить класс следующим образом.

//Calculation1.cs 
partial class ClassRoom 
{ 
private int boycount; //field 

public ClassRoom()  //default constructor 
{ 
    boycount = 30; 
} 
} 
//Calculation2.cs 
partial class ClassRoom 
{ 
public ClassRoom(int bcount)  //overloaded constructor 
{ 
    boycount = bcount; 
} 
public double Avg()  //method 
{ 
    //statements goes here 
} 
} 

Надеюсь, что это ясно.

Смежные вопросы