Я собираюсь продемонстрировать, используя ваш собственный код, что это уже работает так, как вы хотите:
using System;
public sealed class Program{
public static void Main()
{
float a = 3f; // presumably the same as float a = new float(3f);
float b = a;
a = a + 1;
Console.WriteLine("A:{0}", a);//prints 4
Console.WriteLine("B:{0}", b);//prints 3
}
}
И да, как уже отмечали другие люди, это работает так, потому что floatтип значения.Типы значений расположены в стеке.Это означает, что каждая переменная, которую вы объявляете и определяете как тип значения, будет иметь свое собственное пространство в стеке.По ссылочному типу выделяется куча.Это означает, что эти переменные не имеют реальных значений, которые они представляют в стеке.Но они просто указатели на реальные объекты в куче.Посмотрите на MSDN System.ValueType класс для большей ясности.
РЕДАКТИРОВАТЬ 1: Я был не прав насчет того, как типы значений ВСЕГДА хранятся в стеке.Любой, кто читает это, должен также прочитать этот вопрос и этот пост Эрика Липперта, чтобы понять, что на самом деле происходит под одеялом.В этом одном случае официальная документация Microsoft (ссылка, указанная выше) кажется неверной или, по крайней мере, способной неверно истолковать.