C# 对象和引用

C# 对象和引用,c#,C#,我现在有点迷失在对象和引用中。我正在用一些不同的类和winForms构建一个小项目 这是对我的项目的简短描述:我有一个MainForm,当我单击“添加新电影”按钮时,MovieForm打开,我在其中输入有关电影的信息。当我点击“保存”按钮时,我在MovieForm中创建了一个新的信息对象 下一步是将这个NewMovie对象保存到一个文件中。在这里,我对如何从另一个类的其他地方获取这个新电影对象的数据有点迷茫,比如MovieManager,然后我使用FileManager的一个对象来保存数据 在M

我现在有点迷失在对象和引用中。我正在用一些不同的类和winForms构建一个小项目

这是对我的项目的简短描述:我有一个MainForm,当我单击“添加新电影”按钮时,MovieForm打开,我在其中输入有关电影的信息。当我点击“保存”按钮时,我在MovieForm中创建了一个新的信息对象

下一步是将这个NewMovie对象保存到一个文件中。在这里,我对如何从另一个类的其他地方获取这个新电影对象的数据有点迷茫,比如MovieManager,然后我使用FileManager的一个对象来保存数据

在MainForm中,当在MovieForm中单击“添加新电影”按钮时,我会检测以下代码:

MovieForm movieForm = new MovieForm();
if (movieForm.ShowDialog() == DialogResult.OK)
{
Do something here?
}
class MovieForm {
    ...
    public NewMovie Result { get; private set; }
    ...
}
我能在这里够到或传递新的电影形式对象吗?那我该怎么办?在我的项目中,我还有一位电影经理。一种方法是将对象传递给该类?我是否应该在MovieForm中创建一个MovieManager对象,并在创建新的movie对象后以这种方式传递数据


谢谢你的帮助和建议!谢谢

在MovieForm类中创建属性,并在创建实例时传递其值。

ShowDialog完成后,
MovieForm
的引用仍然有效。因此,您可以在电影表单中创建公共属性:

MovieForm movieForm = new MovieForm();
if (movieForm.ShowDialog() == DialogResult.OK)
{
Do something here?
}
class MovieForm {
    ...
    public NewMovie Result { get; private set; }
    ...
}
在MoveForm中设置此值(当窗体关闭或按下某些保存按钮时),然后可以在主窗体中读取该值并将其传递给MovieManager:

MovieForm movieForm = new MovieForm();      
if (movieForm.ShowDialog() == DialogResult.OK)      
{      
    NewMovie newMovie = movieForm.Result;
    myMovieManager.CreateNewMovie(newMovie);
}      

您应该从MovieForm返回新创建的电影实例,并将其存储在manager中

public class MovieManager
{
  List<Movie> movies;

  public void AddMovie(Movie movie)
  {
    movies.Add(movie);
  }

  public Save()
  {
  }
}

public class Movie
{
  public string Name;
}

public class MainForm
{
  MovieManager manager;

  private void NewMovieClick(...)
  {
     using(var form = new MovieForm())
     {
       if(form.ShowDialog(this) == DialogResult.OK)
       {
         manager.Add(from.Movie);
       }
     }
  }
}

public class MovieForm
{
  public Movie Movie;
}
公共级电影经理
{
列出电影;
公共电影(电影)
{
添加(电影);
}
公共储蓄
{
}
}
公映
{
公共字符串名称;
}
公共类主窗体
{
电影经理;
私有void NewMovieClick(…)
{
使用(var form=new MovieForm())
{
if(form.ShowDialog(this)=DialogResult.OK)
{
manager.Add(from.Movie);
}
}
}
}
公共级电影表格
{
公共电影;
}

Hi,我收到一条关于MovieForm中属性的错误消息:可访问性不一致:属性类型“MyMovies.NewMovie”的可访问性不如属性“MyMovies.MovieForm.Result”??@3D Kretiv:将属性从
public
更改为
internal
,或者把
public
放在
classnewmovie
声明前面。了解所有的工作,但是还有很多工作要做,但这是关键部分。从这里开始,我想这会容易一点,现在当我能够获得数据时。但是为什么要使用以下行:NewMovie NewMovie=movieForm.Result?它是如何工作的?我只使用了这一行:movieManager.AddMovie(movieForm.Result);有什么主要区别吗?谢谢你的帮助!:)@3D克雷蒂夫:你的台词非常好(这就是我要用的)。我只是用了两行代码使示例尽可能简单。