Warning: mkdir(): No space left on device in /var/www/tg-me/post.php on line 37

Warning: file_put_contents(aCache/aDaily/post/csharp_ci/--): Failed to open stream: No such file or directory in /var/www/tg-me/post.php on line 50
C# (C Sharp) programming | Telegram Webview: csharp_ci/1371 -
Telegram Group & Telegram Channel
🧠 C# Задача: структура, интерфейс и потеря состояния

Эта задача проверяет знание нюансов работы struct с интерфейсами. Поведение кажется очевидным — но только на первый взгляд.

📦 Задача


using System;

public interface ICounter
{
void Increment();
int Value { get; }
}

public struct Counter : ICounter
{
private int _value;
public void Increment()
{
_value++;
}

public int Value => _value;
}

class Program
{
static void Main()
{
ICounter counter = new Counter();
counter.Increment();
counter.Increment();
Console.WriteLine(counter.Value);
}
}


Что выведет код?

A) 0

😎 1

C) 2

D) Ошибка компиляции

💡 Разбор
Наивный ответ — 2, ведь Increment() вызывается дважды. Но!

📦 Counter — это struct, то есть value type.
Когда мы присваиваем Counter переменной типа ICounter, происходит boxing — создаётся копия структуры в heap.

🔁 Каждый вызов counter.Increment() работает с новой копией, потому что интерфейс не может напрямую изменить struct без создания временного объекта.

🧱 В итоге Increment() изменяет внутреннее состояние временной копии, но не оригинального значения.

Ответ: 0
🧨 Подвох
Использование struct через интерфейс приводит к boxing.

Вызываемые методы действуют на копии, а не на оригинале.

Изменения теряются, и это не ошибка компиляции — это логическая ловушка.

🔧 Как исправить?
Вариант 1: Сделать Counter классом:

```csharp
public class Counter : ICounter
{
private int _value;
public void Increment() => _value++;
public int Value => _value;
}

public class Counter : ICounter
{
private int _value;
public void Increment() => _value++;
public int Value => _value;
}```


@csharp_ci



tg-me.com/csharp_ci/1371
Create:
Last Update:

🧠 C# Задача: структура, интерфейс и потеря состояния

Эта задача проверяет знание нюансов работы struct с интерфейсами. Поведение кажется очевидным — но только на первый взгляд.

📦 Задача


using System;

public interface ICounter
{
void Increment();
int Value { get; }
}

public struct Counter : ICounter
{
private int _value;
public void Increment()
{
_value++;
}

public int Value => _value;
}

class Program
{
static void Main()
{
ICounter counter = new Counter();
counter.Increment();
counter.Increment();
Console.WriteLine(counter.Value);
}
}


Что выведет код?

A) 0

😎 1

C) 2

D) Ошибка компиляции

💡 Разбор
Наивный ответ — 2, ведь Increment() вызывается дважды. Но!

📦 Counter — это struct, то есть value type.
Когда мы присваиваем Counter переменной типа ICounter, происходит boxing — создаётся копия структуры в heap.

🔁 Каждый вызов counter.Increment() работает с новой копией, потому что интерфейс не может напрямую изменить struct без создания временного объекта.

🧱 В итоге Increment() изменяет внутреннее состояние временной копии, но не оригинального значения.

Ответ: 0
🧨 Подвох
Использование struct через интерфейс приводит к boxing.

Вызываемые методы действуют на копии, а не на оригинале.

Изменения теряются, и это не ошибка компиляции — это логическая ловушка.

🔧 Как исправить?
Вариант 1: Сделать Counter классом:

```csharp
public class Counter : ICounter
{
private int _value;
public void Increment() => _value++;
public int Value => _value;
}

public class Counter : ICounter
{
private int _value;
public void Increment() => _value++;
public int Value => _value;
}```


@csharp_ci

BY C# (C Sharp) programming


Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283

Share with your friend now:
tg-me.com/csharp_ci/1371

View MORE
Open in Telegram


C C Sharp programming Telegram | DID YOU KNOW?

Date: |

The Singapore stock market has alternated between positive and negative finishes through the last five trading days since the end of the two-day winning streak in which it had added more than a dozen points or 0.4 percent. The Straits Times Index now sits just above the 3,060-point plateau and it's likely to see a narrow trading range on Monday.

How to Use Bitcoin?

n the U.S. people generally use Bitcoin as an alternative investment, helping diversify a portfolio apart from stocks and bonds. You can also use Bitcoin to make purchases, but the number of vendors that accept the cryptocurrency is still limited. Big companies that accept Bitcoin include Overstock, AT&T and Twitch. You may also find that some small local retailers or certain websites take Bitcoin, but you’ll have to do some digging. That said, PayPal has announced that it will enable cryptocurrency as a funding source for purchases this year, financing purchases by automatically converting crypto holdings to fiat currency for users. “They have 346 million users and they’re connected to 26 million merchants,” says Spencer Montgomery, founder of Uinta Crypto Consulting. “It’s huge.”

C C Sharp programming from it


Telegram C# (C Sharp) programming
FROM USA