Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Прошу задать пару вопросов


Автор: DenWPF 19.4.2011, 13:19
Задайте 10 вопросов мне, мне это нужно для мотивации, что я не чего не знаю)

Автор: Artemon 19.4.2011, 13:28
Вопрос номер 1:

Чем отличается интерфейс от абстрактного класса ?

Автор: DenWPF 19.4.2011, 13:39
Цитата

Чем отличается интерфейс от абстрактного класса ?


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

Абстрактный класс нельзя создать, класс является абстрактным пока в нем есть хотя бы один абстрактный метод.
Абстрактные методы можно переопределять, в наследниках. 


Что то скупо я...

Автор: Экскалупатор 19.4.2011, 14:00
DenWPF, что то ты как то вокруг да около...

чем отличается структура от класса?

Автор: DenWPF 19.4.2011, 14:14
Цитата

чем отличается структура от класса?


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

Структура храниться в стеке, класс в куче.

Классы предназначены для более сложного моделирования, чем структура, структуру нужно использовать для объектов, которые после создания не требуют в извинении. Структурами являются элементарные типы.


з.ы Опять я что то слабенько =((

Автор: v00d00 19.4.2011, 14:57
Не рак ли ты по знаку зодиака?

Автор: DenWPF 19.4.2011, 15:00
Цитата(v00d00 @ 19.4.2011,  14:57)
Не рак ли ты по знаку зодиака?

нет. 
Если ты пытался меня как то подъе... подколоть... то не вижу смысла.

или ты хочешь сказать что я не правильно отвечаю на поставленные вопросы т.е отвечаю не на вопрос конкретно?

Автор: Экскалупатор 19.4.2011, 15:00
простенький вопрос.
сколько "весит" ссылка на экземпляр класса?(в памяти)
а сколько на структуру?

Автор: DenWPF 19.4.2011, 15:09
Цитата(Экскалупатор @ 19.4.2011,  15:00)
простенький вопрос.
сколько "весит" ссылка на экземпляр класса?(в памяти)
а сколько на структуру?

Этот вопрос я знаю, что не знаю. Держал в уме, что нужно узнать.

Но вообще значимые типы весят столько сколько их тип требует.

А ссылка весит вроде 4 байт.

Автор: Экскалупатор 19.4.2011, 15:25
Цитата(DenWPF @  19.4.2011,  14:09 Найти цитируемый пост)
Этот вопрос я знаю, что не знаю. Держал в уме, что нужно узнать.

Но вообще значимые типы весят столько сколько их тип требует.

А ссылка весит вроде 4 байт. 

этот вопрос мне на собеседовании одном задавали. ссылка весит 4 байта(32-bit OS) и 8 в 64. ссылки весят одинаково на любой объект, потому что это в ней хранится просто адрес в памяти.

еще одним интересным заданием на собеседовании было подсчитать сколько памяти(приблизительно) будут занимать объекты и нарисовать(схематически) как объекты располагаются в памяти в каком нибудь простеньком коде(естественно код пишут при тебе из головы и код абсолютно дурацкий)
к примеру в таком:
Код

class Program
    {
        static void Main(string[] args)
        {
            int a = 5;
            ClassA c = new ClassA();
            string s = c.Metod1(a);
            a = ClassA.Multiplying(a);
            s = a + c.Metod1(a);
        }
    }
    public class ClassA
    {
        string s = "string";
        string a;
        public static int Multiplying(int a)
        {
            return a * a;
        }
        public string Metod1(int a)
        {
            this.a = a.ToString();
            return s + this.a;
        }
    }

Автор: DenWPF 19.4.2011, 15:51
Код

class Program
    {
        static void Main(string[] args)
        {
            int a = 5;// 4 байта
            ClassA c = new ClassA();// создается ссылка т.е 4 + вес самого объекта.
            string s = c.Metod1(a);
            a = ClassA.Multiplying(a);
            s = a + c.Metod1(a);
        }
    }
    public class ClassA
    {
        string s = "string"; // 4 + вес самого объекта, я так думаю что количество char.
        string a; // 4 ссылка.
        public static int Multiplying(int a)
        {
            return a * a;
        }
        public string Metod1(int a)
        {
            this.a = a.ToString(); 
            return s + this.a;
        }
    }

аххх сложно...где можно про это все почитать?

Автор: Экскалупатор 19.4.2011, 15:57
Цитата(DenWPF @  19.4.2011,  14:51 Найти цитируемый пост)

аххх сложно...где можно про это все почитать? 

да в общем все у того же Рихтера. там где описывается стек, управляемая куча, что происходит когда передается управление в метод и пр.

Автор: DenWPF 19.4.2011, 16:05
Цитата(Экскалупатор @ 19.4.2011,  15:57)
Цитата(DenWPF @  19.4.2011,  14:51 Найти цитируемый пост)

аххх сложно...где можно про это все почитать? 

да в общем все у того же Рихтера. там где описывается стек, управляемая куча, что происходит когда передается управление в метод и пр.

значит не дочитал до туда.

Спасибо, следующее вопросы.

p.s Вот именно такие простые вопросы мне и нужны..

Автор: Экскалупатор 19.4.2011, 16:10
домен приложения.

Автор: DenWPF 19.4.2011, 16:29
Цитата(Экскалупатор @ 19.4.2011,  16:10)
домен приложения.

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

CLR по умолчанию создает отдельный домен для новой программы, но и программист может этим управлять. Может создать новый домен, и исполнять там код, который является не безопасным, или просто для разделения программы.

p.s ну ты каждый раз в точку =) нету у меня сильных сторон=(

Автор: Экскалупатор 19.4.2011, 17:19
ну давай совсем простое.
как сделать член класса доступным только из класса в котором он объявлен и в классах его наследующих?
как сделать класс доступный только в текущей сборке?

Добавлено через 4 минуты и 59 секунд
в догонку, как сделать что бы тип нельзя было наследовать.

Автор: DenWPF 19.4.2011, 18:44
Цитата

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

protected
Цитата

как сделать класс доступный только в текущей сборке?

internal
Цитата

в догонку, как сделать что бы тип нельзя было наследовать.

Сделать его финальным, вроде sealied

Автор: nikitao 19.4.2011, 20:29
Перечисли плюсы и минусы платформы .Net. Когда ее стоит выбрать для разработки , а когда стоит избежать ?

Автор: wester 19.4.2011, 20:57
продолжу простые вопросы 
1. Зачем нужен Reflection
2. инкапсуляция и скрытие. Чем отличаются ?
3. различие евента от делегата
4. Все классы в BCL наследуются от object. Какой в этом плюс ?

Автор: DenWPF 19.4.2011, 21:45
Код

1. Зачем нужен Reflection

Не чего он нём не знаю, не когда не чего не делал...
Только помню что он имеет доступ к метаданным.

Цитата

2. инкапсуляция и скрытие. Чем отличаются ?

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


Цитата

3. различие евента от делегата

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

Цитата

4. Все классы в BCL наследуются от object. Какой в этом плюс ?

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

+ в Object описаны функции которые довольно часто используются и программист их точно не забудет.


p.s wester, Спасибо, я всё больше понимаю что не чего не знаю =(

жду ещё вопросов

Автор: Voyager 19.4.2011, 21:53
Тоже подключусь. smile
DenWPF, сколько времени ты тратишь на практику, а сколько на теорию?

Автор: DenWPF 19.4.2011, 22:15
Цитата(Voyager @ 19.4.2011,  21:53)
Тоже подключусь. smile
DenWPF, сколько времени ты тратишь на практику, а сколько на теорию?

99% практики =( 
ошибку осознал.
Сейчас почти только теория.

А эти вопросы быстрей что бы действовали стимулом...стыдно блин..

Автор: wester 19.4.2011, 22:57
DenWPF,
вопрос про object был больше с подковыркой - 
просто программистам .net Framework так захотелось. и только. 
Хотя скорее всего это корни ООП. В Qt Классы тоже наследуются QObject

про делегаты.
event просто член класса, не больше не меньше.

ладно, сейчас что нибудь полегче придумаю

1.вопрос про потоки - почему не рекомендуется использоваться такие средства управления потоками как Thread.Start() Thread.Join() 
2. В каких случаях Parallel.For может не обеспечивать распараллевание цикла ?

Автор: DenWPF 19.4.2011, 23:17
Цитата

1.вопрос про потоки - почему не рекомендуется использоваться такие средства управления потоками как Thread.Start() Thread.Join() 

Thread.Start() - имеется ввиду объект.Start() ? если имеется ввиду статический метод класса Thread не сталкивался с таким вообще. 
Но предпологаю, что это для главного потока. И пре останавливать главный поток не есть хорошо.

Цитата

2. В каких случаях Parallel.For может не обеспечивать распараллевание цикла ?

реакция после прочтения :чо?

Добавлено через 3 минуты и 19 секунд
Цитата(nikitao @ 19.4.2011,  20:29)
Перечисли плюсы и минусы платформы .Net. Когда ее стоит выбрать для разработки , а когда стоит избежать ?

По большей части только проблемность кросплатформености .net она есть, но с ней очень сложно совладать.

технология .net развивается быстро и часто и имеет много новых технологий в себе. 

единственная причина по которой я выбираю .net она более проста в использовании, и имеет большую базу литературы и мануалов.

Автор: A5uKa 19.4.2011, 23:21
как сделать константный массив (коллекцию)

Автор: DenWPF 19.4.2011, 23:22
Цитата(A5uKa @ 19.4.2011,  23:21)
как сделать константный массив (коллекцию)

инициализировать при объявлении.

Автор: wester 19.4.2011, 23:37
DenWPF, 
тогда читай про TPL 

про массив - неправильно! smile 
Код

string[] array = new[]{"a", "b"};
array[0] = "c";

прекрасно компилируемый код!

Автор: DenWPF 19.4.2011, 23:53
wester, та ладно...и с каких пор константу можно изменять?

Автор: wester 20.4.2011, 00:07
wester, 
а с каких пор инициализированный массив считается неизменяемым ?
я дал фрагмент кода - скомпилируй, посмотри. 
В целом вопрос конечно интересный, как объявить константный массив

Автор: Экскалупатор 20.4.2011, 00:35
wester, он всю жизь считается неизменяемым.

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

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

p.s. я надеюсь тут имелось ввиду не тот факт что массив он сам по себе константен, т.е. его содержимое менять можно, а вот его размер и тип нельзя.

Автор: A5uKa 20.4.2011, 07:33
Цитата(DenWPF @ 19.4.2011,  23:53)
wester, та ладно...и с каких пор константу можно изменять?

Нельзя (невозможно) создать константый массив, только вот эту коллекцию ( синтаксис Nemerle, в C# примерное так же )

Код

public static numToLetter = System.Array.AsReadOnly( array[ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H' ] )

Автор: DenWPF 20.4.2011, 08:04
A5uKa, то что сказал Экскалупатор...

 да, туплю по полной.
и просто массиву const прописать наверное нельзя, этоже не элементарный тип.

Автор: -Mikle- 20.4.2011, 08:28
Вы тут напутали с массивами и константами. Константа - это фиксированное значение. Константный массив, в вашем понимании - это массив констант. Сам массив остается массивом и никогда не будет константой (в любое время полю array можно задать новое значение). Следовательно значения элементов в нем, по-прежнему, можно изменять после инициализации (хоть на константы, хоть на не константы). Вообще константа это такая вещь, которая обрабатывается компилятором. В исполняемом коде, нет и не было понятия ссылка на константу или имя константы. Значения константы, при компиляции, подставляется во все те места, где она использовалась. Более того, компилятор умеет обрабатывать такие вещи как вычисление константных значений на этапе компиляции. Например, "ASD" + "DEF" скомпилируется сразу в "ASDDEF", это вообще самая элементарная вещь из всех, которые делает компилятор. Но надо знать, что при всем этом, объявление константы сохраняется в метаданных класса, а это значит, что ее можно получить через рефлекшн.

Вот простой вопрос по теме:
Чем отличается "static readonly" от "const"?

Автор: A5uKa 20.4.2011, 08:48
Цитата(-Mikle- @ 20.4.2011,  08:28)
Вот простой вопрос по теме:
Чем отличается "static readonly" от "const"?

Дополню вопрос  smile 

чем
public static numToLetter = System.Array.AsReadOnly( array[ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H' ] )

отличается от
public static readonly numToLetter = array[ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H' ]

Автор: Fitc 20.4.2011, 12:32
Цитата(-Mikle- @ 20.4.2011,  08:28)
Вы тут напутали с массивами и константами. Константа - это фиксированное значение. Константный массив, в вашем понимании - это массив констант. Сам массив остается массивом и никогда не будет константой (в любое время полю array можно задать новое значение). Следовательно значения элементов в нем, по-прежнему, можно изменять после инициализации (хоть на константы, хоть на не константы). Вообще константа это такая вещь, которая обрабатывается компилятором. В исполняемом коде, нет и не было понятия ссылка на константу или имя константы. Значения константы, при компиляции, подставляется во все те места, где она использовалась. Более того, компилятор умеет обрабатывать такие вещи как вычисление константных значений на этапе компиляции. Например, "ASD" + "DEF" скомпилируется сразу в "ASDDEF", это вообще самая элементарная вещь из всех, которые делает компилятор. Но надо знать, что при всем этом, объявление константы сохраняется в метаданных класса, а это значит, что ее можно получить через рефлекшн.

Вот простой вопрос по теме:
Чем отличается "static readonly" от "const"?

Знаю, что поле/свойство readonly можно инициализировать в конструкторе (классе) и значение можно менять через reflection (при желании), что нельзя сделать с константой. Еще (если не путаю) const хранится в стеке приложения,а readonly в куче

Автор: DenWPF 20.4.2011, 14:46
Fitc, эй наглец тут вопросы задают мне. отвечать на них можно уже после того как облажался...

Автор: Fitc 20.4.2011, 14:58
Сорри smile Но ты все еще можешь дать свой ответ

Автор: nikitao 20.4.2011, 16:30
1)В чем отличие
string от System.String
int от System.Int32
и т д

2) Что такое пространства имен и зачем они нужны ?

3) Раскрой смысл акронимов : CIL CLR DLR WPF MSIL WCF WWF LINQ CLS CTS FCL BCL IL GC GAC XAML XML SOAP 

4) Что такое inline инициализация и когда ее не стоит использовать ?

5) Что такое дженерики , для чего они нужны и как они работают ?

6) В чем отличие типа от класса ?

7) Можно ли в .net разместить массив в стеке ?

8) Какие циклы есть в C# ? В чем их различия ? Какой из них "лишний"

9) Что делает ключевое слов yield 

10)  Что появится на экране ?
Код

using System;

namespace ConsoleApplication16
{
    class Program
    {

        static void Inc1(int i)
        {
            i++;
        }

        static void Inc2(ref int i)
        {
            ++i;
        }

        static int Inc3(int i)
        {
            return i++;
        }

        static int Inc4(int i)
        {
            return ++i;
        }

        static int Inc5(ref int i)
        {
            return i++;
        }

        static void Main(string[] args)
        {
            int i = 1;
            Console.WriteLine(i);
            Inc1(i);
            Console.WriteLine(i);
            Inc2(ref i);
            Console.WriteLine(i);
            Inc3(i);
            Console.WriteLine(i);
            i = Inc4(i);
            Console.WriteLine(i);
            i = Inc3(i);
            Console.WriteLine(i);
            i = Inc5(ref i);
            Console.WriteLine(i);

            Console.ReadLine();
        }
    }
}


Добавлено @ 16:31
11 в догонку :
Ключевые слова ref in out params ?

Автор: DenWPF 21.4.2011, 11:18
Цитата

1)В чем отличие
string от System.String
int от System.Int32
и т д

не чем

Цитата

2) Что такое пространства имен и зачем они нужны ?

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

Цитата

3) Раскрой смысл акронимов : CIL CLR DLR WPF MSIL WCF WWF LINQ CLS CTS FCL BCL IL GC GAC XAML XML SOAP 

CIL - Промежуточный язык, асемблер машиного кода, создается для CLR.
CLR - исполняющая среда языка CIL.
DLR - не знаю.
MSIL - не знаю отличия от CIL. 
WWF - не знаю.
LINQ - язык запросов. расширяет возможности языка, и в большинстве случаи упрощает жизнь программиста.
CLS и CTS - вроде это спецификации, т.е чему должны придерживаться языки.
FCL - Framework class library
BCL - базовая библиотека.
IL - одно и тоже CIL
GC - сборщик мусора ?!
GAC - не знаю.
XML - язык разметки
XAML - основан на XML используется для технологии WPF.
SOAP - протокол доступа, тоже основан на XML

Цитата

4) Что такое inline инициализация и когда ее не стоит использовать ?

В одной строке задаются несколько параметров. new Classs(){name = "ddd", age = 21}
Когда не стоит использовать не знаю.


Цитата

5) Что такое дженерики , для чего они нужны и как они работают ?

дженерики - не знаю что такое.

Цитата

6) В чем отличие типа от класса ?

Не в чем.

Цитата

7) Можно ли в .net разместить массив в стеке ?

не знаю

Цитата

8) Какие циклы есть в C# ? В чем их различия ? Какой из них "лишний"

Лишний foreach ? 

Цитата

9) Что делает ключевое слов yield 

 smile 

Цитата

10)  Что появится на экране ?

1
1
2
2
3
3
3

Цитата

Ключевые слова ref in out params ?

ref out - одно и тоже только отличия ref должен быть инициализирован перед передачей в функцию.
params - передача не ограниченного количества параметров
in - используется в foreach механизма не знаю =(







ВСЕ СПАСИБО ЗА ВОПРОСЫ, пока что не буду отвечать на новые, как видите учить мне ещё много.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)