Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.01.2016, 13:58   #1
j303
 
Регистрация: 07.01.2016
Сообщений: 3
По умолчанию Помогите новичку.

Помогите новичку.
Я пишу простейший код, но в строках 34-38 происходит что-то странное. Переменная i как-будто становится ссылкой и при её изменении, изменятся и внутри класса. При этом в строках 39-42 этого не происходит. А разница лишь в том, что в первом случае массив.
Что это вообще за логика и как с этим вообще работать?
Делаю на SharpDevelop 4.5.
Спасибо.

Код:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
 
namespace zzz
{
    public class A
    {
        int[] i = {10};
        int j = 10;
        
        public A(){}
        
        public int[] GetI()
        {
            return this.i;          
        }
        
        public int GetJ()
        {
            return this.j;          
        }
    }
    
    public class B
    {
        public B(){}
        
        public void F1()
        {
            A a = new A();
            
34           MessageBox.Show(a.GetI()[0].ToString());//10            
35            int[] i = a.GetI();         
36            i[0] += 10;         
37            MessageBox.Show(a.GetI()[0].ToString());//20(!!!!!)
            
39            MessageBox.Show(a.GetJ().ToString());//10
40            int j = a.GetJ();           
41            j += 10;            
42            MessageBox.Show(a.GetJ().ToString());//10
        }
    }
    
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
            
            B b = new B();
            b.F1();
        }
    }
}

Последний раз редактировалось Stilet; 07.01.2016 в 15:07.
j303 вне форума Ответить с цитированием
Старый 07.01.2016, 14:08   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Что-то не понял в чем проблема.
Это и есть ссылка, массивы всегда по ссылке передаются, а не копируются, если не сделать это специально (например вызвав Array.CopyTo, .ToList()/ToArray() и т.п.)
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите новичку. Lukash11111 Gamedev - cоздание игр: Unity, OpenGL, DirectX 12 12.07.2009 19:13
помогите новичку ai\ekcah^p Помощь студентам 4 10.05.2009 22:14
Помогите новичку... Манжосов Денис :) Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 11 28.08.2008 10:00
Помогите новичку Alvis Общие вопросы Delphi 3 25.12.2006 08:03
Помогите новичку HIP Общие вопросы Delphi 1 19.12.2006 14:55