Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Язык и синтаксические конструкции 
V
    Опции темы
duk
Дата 16.8.2007, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Some Object
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 19.7.2007

Репутация: нет
Всего: 4



Здравсвуйте. В одной из книжек (Троелсена), на скриншоте ILDasma, я случайно обратил внимание на:

...
virtual get;
virtual set;
...

и

private static class ... (этот класс автоматически создается при обьявлении события)

как не пытался это использовать, хотя бы просто скомпилировать, ничего не выходило. В МСДН, толком тоже ничего не нашел.
Кто знает подскажите, для чего это используется, и можно ли это использовать на практике или это просто выкрутасы компилятора.
PM MAIL   Вверх
duk
Дата 16.8.2007, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Some Object
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 19.7.2007

Репутация: нет
Всего: 4



Разобрался для чего нужны статические классы, не работали у меня потому, как используются начиная с Microsoft Visual Studio 2005/.NET Framework 2.0

Но вопрос с конструкциями get & set отсался открытым. Если кто-то, что-то про это знает, напишите.  Не лишайте меня знаний. smile 
PM MAIL   Вверх
OLEG_NET
Дата 16.8.2007, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 15.5.2007

Репутация: нет
Всего: 1



А напиши-ка ты страницу
PM MAIL   Вверх
duk
Дата 16.8.2007, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Some Object
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 19.7.2007

Репутация: нет
Всего: 4



какую страницу?
если про классы то вот: http://msdn2.microsoft.com/en-us/library/7...ss3(VS.80).aspx
PM MAIL   Вверх
QryStaL
Дата 17.8.2007, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Intellectual feast
**


Профиль
Группа: Участник
Сообщений: 914
Регистрация: 30.11.2005

Репутация: 14
Всего: 32



duk, страницу книжки Троелсена, где находится искомый скриншот с virtual get; virtual set;


--------------------
I don't need a reason being who I am...
PM MAIL ICQ   Вверх
Naum
Дата 17.8.2007, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

Репутация: 8
Всего: 15



Честно говоря, непонятно в чем вопрос.
Код

    abstract class Shape
    {
        public Shape()
        {
            
        }
        public abstract double Area
        {
            get;
            set;
        }
    }

В итогу получаем код в IL
Код

.method public hidebysig newslot specialname abstract [color=red]virtual[/color]
        instance float64  get_Area() cil managed
{
} // end of method Shape::get_Area




Это сообщение отредактировал(а) Naum - 17.8.2007, 09:21


--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
QryStaL
Дата 17.8.2007, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Intellectual feast
**


Профиль
Группа: Участник
Сообщений: 914
Регистрация: 30.11.2005

Репутация: 14
Всего: 32



Мне тоже непонятно, в чем вопрос  smile 

Все абстрактные методы/свойства являются виртуальными.


--------------------
I don't need a reason being who I am...
PM MAIL ICQ   Вверх
duk
Дата 17.8.2007, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Some Object
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 19.7.2007

Репутация: нет
Всего: 4



Все абстрактные методы/свойства являются виртуальными.

QryStaL, так методы и свойства, а не конструкции get и set.


PM MAIL   Вверх
Naum
Дата 17.8.2007, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

Репутация: 8
Всего: 15



Цитата(duk @  17.8.2007,  12:44 Найти цитируемый пост)
а не конструкции get и set.

get и set - те же самые методы!


--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
duk
Дата 17.8.2007, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Some Object
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 19.7.2007

Репутация: нет
Всего: 4



Правильно.  Правда не совсем. Если свойство например называется prop и оно реализует получение и установку значения, то создаются два метода: get_prop & set_prop, так  что если мы напишем public virtual int prop{}, мы получим   virtual get_prop & virtual set_prop.

А при чем тут virtual get
PM MAIL   Вверх
duk
Дата 17.8.2007, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Some Object
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 19.7.2007

Репутация: нет
Всего: 4



Код

         public interface IComponent: IDisposable
    {
        public ISite Site {virtual get; virtual set;}
    }

Перепечатал с книжки. Уменя такое скомпилировать не получилось. Пишет:  Modifiers cannot be placed on property or event accessor declarations
Троелсен стр. 358
PM MAIL   Вверх
Exception
Дата 17.8.2007, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Что-то ты перепутал. На самом деле там так:
Код
public interface IComponent : IDisposable
{
    ISite Site { get; set; }
    event EventHandler Disposed;
}
public class Component : MarshalByRefObject, IComponent, IDisposable
{
    public IContainer Container { get; }
    public ISite Site { virtual get; virtual set; }
}
Естественно, этот код isn't supposed to be compiled, это просто интерфейс, без реализации.
PM   Вверх
QryStaL
Дата 17.8.2007, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Intellectual feast
**


Профиль
Группа: Участник
Сообщений: 914
Регистрация: 30.11.2005

Репутация: 14
Всего: 32



Это кусок из рефлектора:

Код

public interface ISite : IServiceProvider
{
    // Properties
    IComponent Component { get; }
    IContainer Container { get; }
    bool DesignMode { get; }
    string Name { get; set; }
}



--------------------
I don't need a reason being who I am...
PM MAIL ICQ   Вверх
duk
Дата 17.8.2007, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Some Object
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 19.7.2007

Репутация: нет
Всего: 4



Цитата(Exception @  17.8.2007,  13:35 Найти цитируемый пост)
  ISite Site { get; set; }

Не перепутал. Еще раз посмотрел, точно то же что я и набрал. У меня с виртуалами.

Цитата(Exception @  17.8.2007,  13:35 Найти цитируемый пост)
 public ISite Site { virtual get; virtual set; }
 Что это значит. Вот к чему тут virtual get и virtual set, даже вернее какой в этом смысл?
У меня просто в разделе класс этот не напечатан.

PM MAIL   Вверх
Exception
Дата 17.8.2007, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



QryStaL, эти свойства не в ISite, а в Container.
PM   Вверх
duk
Дата 17.8.2007, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Some Object
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 19.7.2007

Репутация: нет
Всего: 4



Exception, 
Цитата(duk @  17.8.2007,  13:50 Найти цитируемый пост)
Цитата(Exception @  17.8.2007,  13:35 )    
 public ISite Site { virtual get; virtual set; }    
 Что это значит. Вот к чему тут virtual get и virtual set, даже вернее какой в этом смысл?
У меня просто в разделе класс этот не напечатан.
 

Для чего автор это напечатал? Имеет ли это какой-то реальный смысл или автор, хотел просто показать что свойство, реализуемое в классе будет виртуальным?

PM MAIL   Вверх
QryStaL
Дата 17.8.2007, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Intellectual feast
**


Профиль
Группа: Участник
Сообщений: 914
Регистрация: 30.11.2005

Репутация: 14
Всего: 32



Exception, вообще-то нет. Сам глянь.


--------------------
I don't need a reason being who I am...
PM MAIL ICQ   Вверх
duk
Дата 19.8.2007, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Some Object
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 19.7.2007

Репутация: нет
Всего: 4



Ладно, учитывая высокую активность, будем считать, что вопрос закрыт. Спасибо всем, кто хоть что нибудь написал.
Кстати, чтоб эта тема была кому-то полезной, вот то самое основное, что нужно знать по поводу статических классов (как мне кажется):
Для тех кому лень смотреть МСДН:
Статические классы по сути своей классами и не являются. Просто сделали саму семантическую конструкцию, похожую на класс для простоты (интуитивности) использования - а так, это просто оболочки для хранения данных и методов, как пространства имен.

Все-таки чем же они отличаются от реальных классов:
1. Все члены этих классов должны быть статическими.
2. Эти классы произведены не посредственно от object - только этот класс может быть базовым для них.
3. Они не могут быть базовыми классами.
4. Нельзя создать объекты этого класса.
5. Могут иметь только статический конструктор.
6. Статические классы загружаются автоматически, когда загружается программа или пространство имен, в котором они описаны.

Небольшой пример:
Код

using System;
namespace MyStaticClass
{
    static class MyStaticCl
    {
          public static Hello(){Console.WriteLine("Hello")}
          public static GoodBy(){Console.WriteLine("Good By")}    
    }
    class program
    {
         static void main(string[] args)
         {
              MyStaticCl.Hello();
              MyStaticCl.GoodBy();
         }
    }
}



Это сообщение отредактировал(а) duk - 19.8.2007, 18:44
PM MAIL   Вверх
archeg
Дата 22.8.2007, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 6.1.2007
Где: Киев

Репутация: 11
Всего: 27



Цитата(duk @  19.8.2007,  18:39 Найти цитируемый пост)
6. Статические классы загружаются автоматически, когда загружается программа или пространство имен, в котором они описаны.

Статические классы загружаются непосредственно перед вызовом статического конструктора - то есть, перед обработкой первой ссылки внутрь статического класса (за исключением случаев, когда вездесущий JIT-компилятор старается оптимизировать это дело, и выделяет память, а потом вызывает конструктор немного раньше)


--------------------
ИМХО задница есть универсальный интерфейс. Ибо через задницу можно сделать абсолютно ВСЕ (bash.org.ru)

Дядька всегда можно спросить в аське, если не задалбывать - не откажет smile
И вообще, на самом деле я студент, и ненавижу обращение на "Вы") Тут все свои  ;)
PM MAIL ICQ Jabber   Вверх
duk
Дата 22.8.2007, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Some Object
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 19.7.2007

Репутация: нет
Всего: 4



archeg,  по МСДНу 6 пункт верен. Глянь сам. 

PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0602 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.