Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / C#: Реально такой трюк провернуть? (вопрос простой, код внутри) / 25 сообщений из 71, страница 1 из 3
22.09.2016, 00:54
    #39313044
Charles Weyland
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C#: Реально такой трюк провернуть? (вопрос простой, код внутри)
Имеется два класса: DataTable и DataTableExt:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
    public class DataTableExt: DataTable
    {
        string addfield;
        //--------------------------------------------------------------
        //Обязательно все 4 конструктора переписывать, чтобы они были в DataTableExt?
        //Или есть "волшебный" способ обозначить, что у DataTableExt все те же конструкторы, что и у DataTable?
        public DataTableExt()
            : base()
        {
        }
        public DataTableExt(string tableName)
            : base(tableName)
        {
        }
        public DataTableExt(string tableName, string tableNameSpace)
            : base(tableName, tableNameSpace)
        {
        }
        public DataTableExt(System.Runtime.Serialization.SerializationInfo info
            , System.Runtime.Serialization.StreamingContext context)
            : base(info, context)
        {
        }
        //--------------------------------------------------------------
        //вопрос по пятому конструктору:
        //как бы так сделать, чтобы что-то подобное работало:
        public DataTableExt(DataTable dataTable, string AdditionalField)
            : base()
        {
            this = dataTable; //т.е. создаваемый объект DataTableExt должен быть, по сути, 
                              //копией ранее созданного объекта DataTable
            this.addfield = AdditionalField;
        }
        //или в этом конструкторе придётся вручную создавать все столбцы, являющиеся копиями таблицы dataTable и переносить данные в цикле? (вроде, бред какой-то...)
    }
...
Рейтинг: 0 / 0
22.09.2016, 01:07
    #39313048
JVF
JVF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C#: Реально такой трюк провернуть? (вопрос простой, код внутри)
Charles Weyland,

конструкторы имеют область видимости public и доступны в базовом классе. переписывать не нужно.
...
Рейтинг: 0 / 0
22.09.2016, 01:11
    #39313049
Charles Weyland
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C#: Реально такой трюк провернуть? (вопрос простой, код внутри)
действительно... мог бы и экспериментальным путём догадаться.
На самом деле основной вопрос состоит в том, что выделено красным.
...
Рейтинг: 0 / 0
22.09.2016, 02:32
    #39313054
JVF
JVF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C#: Реально такой трюк провернуть? (вопрос простой, код внутри)
Код: c#
1.
2.
3.
4.
5.
6.
7.
Public Function Copy() As System.Data.DataTable
     Member of System.Data.DataTable
Summary:
Copies both the structure and data for this System.Data.DataTable.

Return Values:
A new System.Data.DataTable with the same structure (table schemas and constraints) and data as this System.Data.DataTable.If these classes have been derived, the copy will also be of the same derived classes.Both the System.Data.DataTable.Copy and the System.Data.DataTable.Clone methods create a new DataTable with the same structure as the original DataTable. The new DataTable created by the System.Data.DataTable.Copy method has the same set of DataRows as the original table, but the new DataTable created by the System.Data.DataTable.Clone method does not contain any DataRows.
...
Рейтинг: 0 / 0
22.09.2016, 10:28
    #39313185
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C#: Реально такой трюк провернуть? (вопрос простой, код внутри)
JVFCharles Weyland,

конструкторы имеют область видимости public и доступны в базовом классе. переписывать не нужно.
Ога, Ога!!
Не наследуются конструкторы в C#.
Учи матчасть и не советуй глупостей.
...
Рейтинг: 0 / 0
22.09.2016, 10:42
    #39313199
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C#: Реально такой трюк провернуть? (вопрос простой, код внутри)
разделите конструирование и инициализацию - и ни в сём себе не отказывайте
...
Рейтинг: 0 / 0
22.09.2016, 18:29
    #39313693
JVF
JVF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C#: Реально такой трюк провернуть? (вопрос простой, код внутри)
ЕвгенийВОга, Ога!!
Не наследуются конструкторы в C#.ты хоть понял, что сказал? в новом классе отсутствуют конструкторы базового? лаврова на тебя нет
...
Рейтинг: 0 / 0
22.09.2016, 20:11
    #39313728
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C#: Реально такой трюк провернуть? (вопрос простой, код внутри)
Charles Weyland
Код: c#
1.
//или в этом конструкторе придётся вручную создавать все столбцы, являющиеся копиями таблицы dataTable и переносить данные в цикле? (вроде, бред какой-то...)


Нет, просто выкинуть DataTable и забыть об этом анахронизме начала века.
...
Рейтинг: 0 / 0
22.09.2016, 20:26
    #39313735
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C#: Реально такой трюк провернуть? (вопрос простой, код внутри)
Axeleron,

и чем заменить прикажете?
...
Рейтинг: 0 / 0
22.09.2016, 20:29
    #39313736
JVF
JVF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C#: Реально такой трюк провернуть? (вопрос простой, код внутри)
AxeleronНет, просто выкинуть DataTable и забыть об этом анахронизме начала века.а очеты на чем делать? на LINQ-e штоли?
...
Рейтинг: 0 / 0
22.09.2016, 22:01
    #39313759
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C#: Реально такой трюк провернуть? (вопрос простой, код внутри)
JVFЕвгенийВОга, Ога!!
Не наследуются конструкторы в C#.ты хоть понял, что сказал? в новом классе отсутствуют конструкторы базового? лаврова на тебя нет
Наберут по объявлению, а потом еще 200 тыщ хотят! Кошмар! Срамота!
https://msdn.microsoft.com/ru-ru/library/ms173149.aspx
...
Рейтинг: 0 / 0
22.09.2016, 22:27
    #39313767
JVF
JVF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C#: Реально такой трюк провернуть? (вопрос простой, код внутри)
ЕвгенийВ,

Хорошо, что сия фраза "Не наследуются конструкторы в C#" тогда означала? В производном классе наследуются все члены базового и конструкторы в том числе.
...
Рейтинг: 0 / 0
22.09.2016, 23:23
    #39313779
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C#: Реально такой трюк провернуть? (вопрос простой, код внутри)
DataTable поддерживает сериалиацию, можно сериалиовать, а потом десериалиовать DataTable И получится копия :D
...
Рейтинг: 0 / 0
23.09.2016, 00:00
    #39313794
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C#: Реально такой трюк провернуть? (вопрос простой, код внутри)
JVFЕвгенийВ,

Хорошо, что сия фраза "Не наследуются конструкторы в C#" тогда означала? В производном классе наследуются все члены базового и конструкторы в том числе.
То что конструкторы НЕ НАСЛЕДУЮТСЯ!
В конструкторе дочернего ты можешь вызвать любой конструктор базового, если позволяет его видимость и любой свой, если это не приведет к циклу.
Но дочерний ты можешь создать только используя конструкторы его самого, но ни как не базового!
...
Рейтинг: 0 / 0
23.09.2016, 08:39
    #39313872
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C#: Реально такой трюк провернуть? (вопрос простой, код внутри)
JVFAxeleronНет, просто выкинуть DataTable и забыть об этом анахронизме начала века.а очеты на чем делать? на LINQ-e штоли?
А в чем DataTable выгодно отличается для построения отчётов от других классов?
...
Рейтинг: 0 / 0
23.09.2016, 08:46
    #39313875
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C#: Реально такой трюк провернуть? (вопрос простой, код внутри)
Roman MejtesDataTable поддерживает сериалиацию, можно сериалиовать, а потом десериалиовать DataTable И получится копия :D
Зачем, когда есть метод Copy?

https://msdn.microsoft.com/ru-ru/library/564wf598(v=vs.110).aspx
...
Рейтинг: 0 / 0
23.09.2016, 12:52
    #39314187
TheBatya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C#: Реально такой трюк провернуть? (вопрос простой, код внутри)
ЕвгенийВ,

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{



    class A
    {
        public A()
        {
            System.Console.WriteLine("is A");
        }
    }

    class B : A
    {
    }


    class Program
    {
        static void Main(string[] args)
        {
            B b = new B();
            System.Console.ReadLine();
        }
    }
}



Console:
is A
...
Рейтинг: 0 / 0
23.09.2016, 12:58
    #39314191
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C#: Реально такой трюк провернуть? (вопрос простой, код внутри)
TheBatyaЕвгенийВ,
Console:

is A
ну и какой практический смысл этого примера?
...
Рейтинг: 0 / 0
23.09.2016, 13:07
    #39314203
TheBatya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C#: Реально такой трюк провернуть? (вопрос простой, код внутри)
Roman Mejtes,

Это был ответ ЕвгенийюВ, который утверждал что конструкторы не наследуются
...
Рейтинг: 0 / 0
23.09.2016, 13:08
    #39314205
Charles Weyland
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C#: Реально такой трюк провернуть? (вопрос простой, код внутри)
TheBatyaConsole:
is A
и что?)
это вообще не показательно.
Вот показательно
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    class A
    {
        public A(string a)
        {
            System.Console.WriteLine(a);
        }
    }

    class B : A
    {
    }


    class Program
    {
        static void Main(string[] args)
        {
            B b = new B("hi");
            System.Console.ReadLine();
        }
    }
}
...
Рейтинг: 0 / 0
23.09.2016, 13:22
    #39314232
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C#: Реально такой трюк провернуть? (вопрос простой, код внутри)
Charles WeylandВот показательно
И что тут показательно? Показательно не компилируется. Пишет что нет такого конструктора у B
...
Рейтинг: 0 / 0
23.09.2016, 13:34
    #39314245
Charles Weyland
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C#: Реально такой трюк провернуть? (вопрос простой, код внутри)
Dima TИ что тут показательно? Показательно не компилируется. Пишет что нет такого конструктора у B
Да, именно это и показательно, а то пишут тут всякие:
Dima TCharles Weyland,
конструкторы имеют область видимости public и доступны в базовом классе. переписывать не нужно.
...
Рейтинг: 0 / 0
23.09.2016, 13:45
    #39314258
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C#: Реально такой трюк провернуть? (вопрос простой, код внутри)
Charles WeylandDima TИ что тут показательно? Показательно не компилируется. Пишет что нет такого конструктора у B
Да, именно это и показательно, а то пишут тут всякие:
Dima TCharles Weyland,
конструкторы имеют область видимости public и доступны в базовом классе. переписывать не нужно.
Это не я писал.
В целом правильно пишут. Правда забыли добавить что надо явно вызов прописать
Код: c#
1.
2.
3.
    class B : A    {
			public B(string b) : base(b)  { }
}
...
Рейтинг: 0 / 0
23.09.2016, 13:52
    #39314268
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C#: Реально такой трюк провернуть? (вопрос простой, код внутри)
Charles Weyland
Код: c#
1.
2.
        //Обязательно все 4 конструктора переписывать, чтобы они были в DataTableExt?
        //Или есть "волшебный" способ обозначить, что у DataTableExt все те же конструкторы, что и у DataTable?


Извиняюсь, по диагонали топик читал, надо прописывать.
...
Рейтинг: 0 / 0
23.09.2016, 15:25
    #39314412
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C#: Реально такой трюк провернуть? (вопрос простой, код внутри)
TheBatyaЕвгенийВ,

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{



    class A
    {
        public A()
        {
            System.Console.WriteLine("is A");
        }
    }

    class B : A
    {
    }


    class Program
    {
        static void Main(string[] args)
        {
            B b = new B();
            System.Console.ReadLine();
        }
    }
}



Console:
is A
Это доказывает только то, что совсем не рубите матчасть, а хотите получать 250. Кошмар! Срамота!
если не прописано явно конструкторов, то компилятор генерит публичный конструктор без параметров по умолчанию

если явно не указан вызов конструктора базового класса, то компилятор генерит вызов конструктора по умолчанию базового класса, для всех таки конструкторов наследника

Попробуй в А сделать конструктор приватным и получишь малатком по башке пальцам от компилятора
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / C#: Реально такой трюк провернуть? (вопрос простой, код внутри) / 25 сообщений из 71, страница 1 из 3
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]