プライベート変数を基本クラスに移動するとき、プライベート変数をどのように設定する必要がありますか?

私は私のすべてのコントローラに以下のコードを持っています:

public class PackagesController : BaseController
{
    private IAccountService _account;
    private IDataSourceService _dataSource;
    private IPackageService _package;
    private IProductService _product;
    private IContentService _content;
    private ISequenceService _sequence;

それらはすべてBaseControllerから継承します。私は、公的、私的、保護の違いについて少し混乱しています。私はBaseControllerにこれらを移動できると思っています。私がこれをした場合、私はプライベート、保護されているか、あるいは他の修飾子があるはずです。

1

3 答え

派生クラスにアクセスさせたい場合は、Protectedを使用します。プライベートでは、派生したクラスでもアクセスすることができません。これはあなたが望むものではありません。パブリックであれば、外部からControllerのメンバーにアクセスする必要はないので、ここでは不要なコードにアクセスできます。

4
追加された
@ Restutaあなたは実際にそこでの投票のためのかなり詳細な説明を得ているようです。
追加された 著者 Andrew Barber,
時には私は、この質問のように人々のロジックを全く理解していません。 stackoverflow.com/questions/2070661/…
追加された 著者 Restuta,
うん、それは馬鹿だったね。
追加された 著者 Restuta,

このフィールドをBaseControllerに移動した後に、 protected を使用する必要があるようです。

Private means field is private for the type it's declared on. -- You will be able to use this fields only inside BaseController after you'll move them.

Protected means field is ok to use in all derived types as well, but not from outside. -- You will be able to use this fields inside BaseController and all derived ones after you'll move them.

Public means it can be used from everywhere. -- You will be able to use this fields from everywhere after you'll move them.

MSDN およびこのSOの質問

1
追加された

After you move these variables from PackagesController to BaseController, if they are just used in BaseController, then they should be private, if they will be used in both PackagesController & BaseController, they should be protected. I don't seggust you the use 'public' for variables.

1
追加された