powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Задача на проф. пригодность
39 сообщений из 39, показаны все 2 страниц
Задача на проф. пригодность
    #39841396
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что возвратит данный код?
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
class A
{
            public int Value { get; set; }

            public static implicit operator A(int x) => new A { Value = x };

            public override bool Equals(object obj) => obj is A a && a.Value == Value;
}

Console.WriteLine(new A[] { 1, 1, 1, 2, 2 }.Distinct().Count());
...
Рейтинг: 0 / 0
Задача на проф. пригодность
    #39841404
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pation,

Почему?
...
Рейтинг: 0 / 0
Задача на проф. пригодность
    #39841427
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pation,
5
...
Рейтинг: 0 / 0
Задача на проф. пригодность
    #39841460
Супер_Пав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
5, т.к. сравнение не отработает. Сомнительная проверка на проф пригодность. Столкнулся с этим относительно недавно, раньше не знал об этом.
...
Рейтинг: 0 / 0
Задача на проф. пригодность
    #39841489
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
     class Comp : IEqualityComparer<A>
        {
            public bool Equals(A x, A y) => x == y || !(x == null || y == null) || x.Value == y.Value;
            public int GetHashCode(A obj) => obj == null ? 0 : obj.Value;          
        }
....Distinct(new Comp()).Count();
...
Рейтинг: 0 / 0
Задача на проф. пригодность
    #39841515
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Супер_Пав, 5? а тест запускали?
...
Рейтинг: 0 / 0
Задача на проф. пригодность
    #39841526
Супер_Пав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buserСупер_Пав, 5? а тест запускали?
после того,как вы спросили, запустил. 5. Как я и говорил, сравнение не вызывается, т.к. переопределено не правильно
...
Рейтинг: 0 / 0
Задача на проф. пригодность
    #39841539
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pationpation,
Почему?
Ну да правильный ответ ужо был - пуркуа что GetHashCode(). Не зря в учебниках о том пишут.
...
Рейтинг: 0 / 0
Задача на проф. пригодность
    #39841545
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тот же решарпер в случае, когда из пары Equals/GetHashCode переопределен только один метод, подчеркивает переопределенный метод, и настойчиво рекомендует переопределить второй, что в общем-то правильно, хотя в данном случае не вполне очевидно - Distinct использует внутренний класс Set<T>, который для обнаружения аналогичного элемента активно использует поиск во внутренних структурах на основании хэшкода. Если нашлось - дальше вызывает IEqualityComparer<TSource> (если не задан, то дефолтный), если не нашлось - Equals объекта вообще не будет вызван, считается, что он уже уникален.
...
Рейтинг: 0 / 0
Задача на проф. пригодность
    #39841568
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что вернёт данный код?
Код: javascript
1.
[1, 2, 3, 4, 5].map(parseInt)


Почему?
...
Рейтинг: 0 / 0
Задача на проф. пригодность
    #39841572
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,
[1, 2, 3, 4, 5].map(x=>parseInt(x,4))
...
Рейтинг: 0 / 0
Задача на проф. пригодность
    #39841647
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныEquals объекта вообще не будет вызван, считается, что он уже уникален.

ох, не конечно, equals всегда будет вызван
...
Рейтинг: 0 / 0
Задача на проф. пригодность
    #39841710
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttСон Веры ПавловныEquals объекта вообще не будет вызван, считается, что он уже уникален.

ох, не конечно, equals всегда будет вызван
Это легко проверяется установкой брейкпоинта в теле Equals.
...
Рейтинг: 0 / 0
Задача на проф. пригодность
    #39841729
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
class Program
{
  public static void Main(string[] args)
  {
    Console.WriteLine(Enumerable.Range(0,5).Select(n=>new Foo()).Distinct().Count());
  }
}
class Foo
{
  public override bool Equals(object obj)=>throw new NotImplementedException();
}


Код: plaintext
5
...
Рейтинг: 0 / 0
Задача на проф. пригодность
    #39841755
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В случае Distinct, без переданного компарера, будет вызван
Код: c#
1.
class ObjectEqualityComparer<T>.Equals(object, object)


Который сравнит ссылки.
...
Рейтинг: 0 / 0
Задача на проф. пригодность
    #39841757
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВВ случае Distinct, без переданного компарера, будет вызван
Код: c#
1.
class ObjectEqualityComparer<T>.Equals(object, object)


Который сравнит ссылки.
Он не сравнит ссылки, он вызовет obj1.Equals(obj2): https://referencesource.microsoft.com/#mscorlib/system/collections/generic/equalitycomparer.cs,250 (сравение ссылок - это ReferenceEquals).
Если Equals переопределен, то, разумеется, вызовется переопределенный метод. Но до этого не доходит.
...
Рейтинг: 0 / 0
Задача на проф. пригодность
    #39841758
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, если так
Код: c#
1.
struct A.....


То результат 2.
Ешо одын отличий клас от структур!
...
Рейтинг: 0 / 0
Задача на проф. пригодность
    #39841761
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВКстати, если так
Код: c#
1.
struct A.....


То результат 2.
Ешо одын отличий клас от структур!
Ну, у структур хэшкод вычисляется совсем не так, как у классов, это вроде бы известный факт. Особенно если у структуры нет ссылочных полей.
...
Рейтинг: 0 / 0
Задача на проф. пригодность
    #39841814
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВКстати, если так
Код: c#
1.
struct A.....



То результат 2.
Ешо одын отличий клас от структур!

Нет, то же будет 5
...
Рейтинг: 0 / 0
Задача на проф. пригодность
    #39841815
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныТот же решарпер в случае, когда из пары Equals/GetHashCode переопределен только один метод, подчеркивает переопределенный метод, и настойчиво рекомендует переопределить второй, что в общем-то правильно, хотя в данном случае не вполне очевидно - Distinct использует внутренний класс Set<T>, который для обнаружения аналогичного элемента активно использует поиск во внутренних структурах на основании хэшкода. Если нашлось - дальше вызывает IEqualityComparer<TSource> (если не задан, то дефолтный), если не нашлось - Equals объекта вообще не будет вызван, считается, что он уже уникален.

Решарпер для GetHashCode формирует очень сомнительный код, который в большинстве случаев работает неправильно
...
Рейтинг: 0 / 0
Задача на проф. пригодность
    #39841823
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pationРешарпер для GetHashCode формирует очень сомнительный код, который в большинстве случаев работает неправильно
Ээмм.. ну да, обычно он его формирует как
Код: c#
1.
2.
3.
4.
public override int GetHashCode()
{
  return base.GetHashCode();
}


Я всегда считал, что это просто болванка, в которую нужно вписывать свой код.
...
Рейтинг: 0 / 0
Задача на проф. пригодность
    #39841827
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,

вообще-то я говорил о том, что он предлагает что вроде такого:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
сlass A
{
   public int Id {get;set;}
   public string Name {get;set;}
   public DateTime Date {get;set;}

   public override int GetHashCode()
   {
       unchecked
                {
                    var hashCode = Id.GetHashCode();
                    hashCode = (hashCode * 397) ^ Name.GetHashCode();
                    hashCode = (hashCode * 397) ^ Date.GetHashCode();
                    return hashCode;
                }
   }

}
...
Рейтинг: 0 / 0
Задача на проф. пригодность
    #39841843
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pationСон Веры Павловны,

вообще-то я говорил о том, что он предлагает что вроде такого:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
сlass A
{
   public int Id {get;set;}
   public string Name {get;set;}
   public DateTime Date {get;set;}

   public override int GetHashCode()
   {
       unchecked
                {
                    var hashCode = Id.GetHashCode();
                    hashCode = (hashCode * 397) ^ Name.GetHashCode();
                    hashCode = (hashCode * 397) ^ Date.GetHashCode();
                    return hashCode;
                }
   }

}


Мой решарпер ни разу мне такого не предлагал. Более того, обычно вычисление хэшкода на основе неиммутабельных полей чревато очень серьёзными граблями, так что я как-то вообще удивлён.
...
Рейтинг: 0 / 0
Задача на проф. пригодность
    #39841850
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныЕсли Equals переопределен, то, разумеется, вызовется переопределенный метод. Но до этого не доходит.

Да, хеш будет вычислен от ссылки.
Но опять таки, by design.
...
Рейтинг: 0 / 0
Задача на проф. пригодность
    #39841887
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttСон Веры ПавловныЕсли Equals переопределен, то, разумеется, вызовется переопределенный метод. Но до этого не доходит.

Да, хеш будет вычислен от ссылки.
Но опять таки, by design.
А вот фик там :)
Ссылка может поменяться после сборки мусора, но у одного и того объекта, на протяжении жизни хеш должен быть постоянным.
Видимо ради экономии места, для вычисления хеша, используется тоже самое поле, что и для lock.
...
Рейтинг: 0 / 0
Задача на проф. пригодность
    #39841888
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pationЕвгенийВКстати, если так
Код: c#
1.
struct A.....



То результат 2.
Ешо одын отличий клас от структур!

Нет, то же будет 5
А ты спытай!
Структура унаследована от ValueType, у последнего переопределены оба метода, они и будут вызваны.
...
Рейтинг: 0 / 0
Задача на проф. пригодность
    #39841943
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ,

базовые методы у стукрутуры GetHashCode и Equals ппц какие тормозные, по этому их лучше сразу переопределить, если будите их использовать в большом количестве.
...
Рейтинг: 0 / 0
Задача на проф. пригодность
    #39841953
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes,
Если нет полей, ссылочных типов, то довольно шустро.
...
Рейтинг: 0 / 0
Задача на проф. пригодность
    #39841971
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что будет тут? И почему.
Код: 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.
   static void Main(string[] args)
        {
            var data = new S1[] { 123, 123L, 456L, 123 };

            var cnt = data.Distinct().Count();
            Console.ReadLine();
        }

        [StructLayout(LayoutKind.Sequential, Size = 1024)]
        struct S1
        {
            public static unsafe implicit operator S1(int i)
            {
                S1 res = new S1();
                var arr = BitConverter.GetBytes(i);
                var x = GCHandle.Alloc(res, GCHandleType.Pinned);
                Marshal.Copy(arr, 0, x.AddrOfPinnedObject(), arr.Length);
                x.Free();
                return res;
            }
            public static unsafe implicit operator S1(long i)
            {
                S1 res = new S1();
                var arr = BitConverter.GetBytes(i);
                var x = GCHandle.Alloc(res, GCHandleType.Pinned);
                Marshal.Copy(arr, 0, x.AddrOfPinnedObject(), arr.Length);
                x.Free();
                return res;
            }
        }
...
Рейтинг: 0 / 0
Задача на проф. пригодность
    #39841979
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВpationпропущено...


Нет, то же будет 5
А ты спытай!
Структура унаследована от ValueType, у последнего переопределены оба метода, они и будут вызваны.
сорь, неподумавши ляпнул
...
Рейтинг: 0 / 0
Задача на проф. пригодность
    #39841994
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВhVosttпропущено...


Да, хеш будет вычислен от ссылки.
Но опять таки, by design.
А вот фик там :)
Ссылка может поменяться после сборки мусора, но у одного и того объекта, на протяжении жизни хеш должен быть постоянным.
Видимо ради экономии места, для вычисления хеша, используется тоже самое поле, что и для lock.
Вот тут товарищ пишет (прилагая пруфлинки) что для ссылочных типов используется некий уникальный для каждого потока генератор хешей. Ну, и сохраняет его в SyncBlock'е.
...
Рейтинг: 0 / 0
Задача на проф. пригодность
    #39841997
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ,
Так правильно.
Код: 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.
   [StructLayout(LayoutKind.Sequential, Size = 1024)]
        struct S1
        {
            public static unsafe implicit operator S1(int i)
            {
                S1[] res = new S1[1];
                var arr = BitConverter.GetBytes(i);
                var x = GCHandle.Alloc(res, GCHandleType.Pinned);
                var adr = x.AddrOfPinnedObject();
                Marshal.Copy(arr, 0, adr, arr.Length);
                x.Free();
                return res[0];
            }
            public static unsafe implicit operator S1(long i)
            {
                S1[] res = new S1[1]; ;
                var arr = BitConverter.GetBytes(i);
                var x = GCHandle.Alloc(res, GCHandleType.Pinned);
                var adr = x.AddrOfPinnedObject();
                Marshal.Copy(arr, 0, adr, arr.Length);
                x.Free();
                return res[0];
            }
     
        }
...
Рейтинг: 0 / 0
Задача на проф. пригодность
    #39842020
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я помню из книги Рихтера, еще за 2007 год, для того чтобы метод Equals заработал, надо обязательно переопределить метод GetHashCode. Всегда парами их надо переопределять.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
// Вот так вернет 2
class A
{
    public int Value { get; set; }

    public static implicit operator A(int x) => new A { Value = x };

    public override bool Equals(object obj) => obj is A a && a.Value == Value;
            
    public override int GetHashCode() => Value.GetHashCode();
}
...
Рейтинг: 0 / 0
Задача на проф. пригодность
    #39842024
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Захотел проверить, но что-то даже не компилируется

Код: 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.
using System;
using System.Linq;

namespace ConsoleApplication5
{
    class Program
    {
        static void Main(string[] args)
        {


            Console.WriteLine(new A[] { 1, 1, 1, 2, 2 }.Distinct().Count());
            Console.ReadLine();

          
        }
    }
    class A
    {
        public int Value { get; set; }

        public static implicit operator A(int x) => new A { Value = x };

        public override bool Equals(object obj) => obj is A a && a.Value == Value;
    }

}
...
Рейтинг: 0 / 0
Задача на проф. пригодность
    #39842025
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2,

Visual Studio когда последний раз обновлял?

Тынц
...
Рейтинг: 0 / 0
Задача на проф. пригодность
    #39842045
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ,

Вот так будет то же самое:
Код: 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.
[StructLayout(LayoutKind.Sequential, Size = 1024)]
struct S1
{
  static Random Rnd = new Random((int)DateTime.Now.Ticks);
  public static implicit operator S1(int i)
  {
    S1[] res = new S1[1];
    var arr = new byte[BitConverter.GetBytes(i).Length];
    Rnd.NextBytes(arr);
    var x = GCHandle.Alloc(res, GCHandleType.Pinned);
    var adr = x.AddrOfPinnedObject();
    Marshal.Copy(arr, 0, adr, arr.Length);
    x.Free();
    return res[0];
  }
  public static implicit operator S1(long i)
  {
    S1[] res = new S1[1]; ;
    var arr = new byte[BitConverter.GetBytes(i).Length];
    Rnd.NextBytes(arr);
    var x = GCHandle.Alloc(res, GCHandleType.Pinned);
    var adr = x.AddrOfPinnedObject();
    Marshal.Copy(arr, 0, adr, arr.Length);
    x.Free();
    return res[0];
  }
}


Cat2Захотел проверить, но что-то даже не компилируется
Всегда следует исходить из того, что публикуемый код написан на последней существующей (даже не поддерживаемой) версии языка.
...
Рейтинг: 0 / 0
Задача на проф. пригодность
    #39842052
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныВот так будет то же самое:
А вот так - совсем не то же самое:
Код: 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.
[StructLayout(LayoutKind.Sequential, Size = 1024)]
struct S1
{
  long Value;
  static Random Rnd = new Random((int)DateTime.Now.Ticks);
  public static implicit operator S1(int i)
  {
    S1[] res = new S1[1];
    var arr = new byte[BitConverter.GetBytes(i).Length];
    Rnd.NextBytes(arr);
    var x = GCHandle.Alloc(res, GCHandleType.Pinned);
    var adr = x.AddrOfPinnedObject();
    Marshal.Copy(arr, 0, adr, arr.Length);
    x.Free();
    return res[0];
  }
  public static implicit operator S1(long i)
  {
    S1[] res = new S1[1]; ;
    var arr = new byte[BitConverter.GetBytes(i).Length];
    Rnd.NextBytes(arr);
    var x = GCHandle.Alloc(res, GCHandleType.Pinned);
    var adr = x.AddrOfPinnedObject();
    Marshal.Copy(arr, 0, adr, arr.Length);
    x.Free();
    return res[0];
  }
}


и так тоже:
Код: 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.
[StructLayout(LayoutKind.Sequential, Size = 1024)]
struct S1
{
  long Value;
  static Random Rnd = new Random((int)DateTime.Now.Ticks);
  public static implicit operator S1(int i)
  {
    S1[] res = new S1[1];
    var arr = BitConverter.GetBytes(i);
    var x = GCHandle.Alloc(res, GCHandleType.Pinned);
    var adr = x.AddrOfPinnedObject();
    Marshal.Copy(arr, 0, adr, arr.Length);
    x.Free();
    return res[0];
  }
  public static implicit operator S1(long i)
  {
    S1[] res = new S1[1]; ;
    var arr = BitConverter.GetBytes(i);
    var x = GCHandle.Alloc(res, GCHandleType.Pinned);
    var adr = x.AddrOfPinnedObject();
    Marshal.Copy(arr, 0, adr, arr.Length);
    x.Free();
    return res[0];
  }
}


Т.о. если полей нет, то вычислитель хэшкода на содержимое занимаемой памяти не смотрит.
...
Рейтинг: 0 / 0
Задача на проф. пригодность
    #39842099
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВВидимо ради экономии места, для вычисления хеша, используется тоже самое поле, что и для lock.

Да хеш будет лежать вместо индекса контекста синхронизации :)
Я ж не имел в виду от значения ссылки
...
Рейтинг: 0 / 0
Задача на проф. пригодность
    #39842393
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныТ.о. если полей нет, то вычислитель хэшкода на содержимое занимаемой памяти не смотрит.
Судя по исходникам ValueType и coreclr , получается такая картина:
1. Эта структура, как ни странно, не может использовать быстрые варианты вычисления хэшкода и эквивалентности: если вытащить рефлекшеном значение метода CanCompareBits , то он вернет false. Видимо, структура является неплотно упакованной, потому как другие причины такого значения (переопределенные GetHashCode и/или Equals, наличие полей ссылочного типа - полей нет вообще никаких) отпадают (вот нативный код реализации CanCompareBits ).
2. Из-за п.1 мы получаем сравнение в цикле полей, и вычисление хэшкода на основе полей. Но т.к. полей нет, то в цикл мы не входим, и из метода Equals выходим с значением true . И т.к. полей нет, то вычислитель хэшкода возвращает значение, установленное до цикла вычисления хэшкода - некий TypeId, полученный от MethodTable типа, и обработанный вот таким образом :
Код: c#
1.
hashCode = typeID * 711650207 + 2506965631U;

- т.е. всегда одинаковый для всех экземпляров структуры.
...
Рейтинг: 0 / 0
39 сообщений из 39, показаны все 2 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Задача на проф. пригодность
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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