标签: access-modifiers

如何自动更改 IntelliJ 中的方法/类访问级别?

很多时候,我从方法开始public,然后在完成后将它们降低到所需的最低水平,但这有点乏味。有没有一种方法可以自动将所有隐私修饰符(对于类和方法)一次性全部更改为尽可能低的值?

java access-modifiers intellij-idea

3
推荐指数
1
解决办法
1877
查看次数

为什么在 C# 中需要提及实现接口属性的访问修饰符?

默认情况下,接口和实现接口的类中的方法是公共的。他们不需要提到的访问器。

为什么属性,特别是在实现接口的类中,需要提到公共访问修饰符?无论如何都不允许使用其他修饰符。

c# properties interface access-modifiers

3
推荐指数
1
解决办法
1203
查看次数

OOP,受保护与公众对比.什么时候用?

我试图了解将类变量设为私有而非公共的好处.我明白了getter/setter方法访问/修改私有/受保护的数据,但它的唯一目的就是"让我从我的压延数据"?示例:我不怎么说

$person->age = x;//bad?
Run Code Online (Sandbox Code Playgroud)

具有不同的破坏潜力

$person->set_x(x);//reccommended in OOP articles
Run Code Online (Sandbox Code Playgroud)

oop access-modifiers

2
推荐指数
1
解决办法
638
查看次数

除了一个集会外,我怎样才能隐藏"setter"?

我的另一个问题中,我已经提到了这个问题,但我认为值得将其分解为自己的问题,因为它并不真正依赖于我提到的其他场景.

无论如何 - 在Q上,不知道这是否可能.寻找解决方案/解决方法.

我有一个类库,只有POCO:

MyCompany.MyProject.Domain.POCO
Run Code Online (Sandbox Code Playgroud)

这个程序集有一个这样的POCO:

public class Post
{
   public int PostId { get; set; }
   public int Name { get; set; }
      ...
}
Run Code Online (Sandbox Code Playgroud)

现在,我有另一个类库,它是我的DAL/Repository,并使用Entity Framework 4.0进行持久化:

MyCompany.MyProject.Repositories
Run Code Online (Sandbox Code Playgroud)

这个程序集引用了POCO项目,因为它需要在POCO上执行CRUD操作(抓取DB对象,项目进入POCO,返回,以及修改POCO).

现在,我还有一个Web应用程序,它同时引用了POCO和Repository程序集.

如果我这样做:

somePOCO.PostId = 10;
Run Code Online (Sandbox Code Playgroud)

我得到一个SQLException,因为PostId是数据库中的IDENTITY字段,因此不应该明确设置.

有没有办法可以隐藏这些特殊属性的setter,以便只有存储库可以访问setter?

我想不出用常规辅助功能修饰符来做到这一点的方法(因为它们都不适合这种情况),你们能想到一个解决方法吗?

.net c# assemblies access-modifiers getter-setter

2
推荐指数
1
解决办法
915
查看次数

受保护成员的范围

我准备SCJP,我也知道受保护的成员范围在包内以及其他包中,只有继承才有可能.

例如:我有三个类作为Parentclass Childclass Friendclass

package x.parent;

 class Parentclass{
 protected int x=10;
  ...............
  }

 package x.child;

 class Childlass extends Parentclass{
  super.x=20;
  ...............
}

 package x.child;

 import x.parent.Parentclass;

 class Friendclass{
 Parentclass pc = new Parentclass();
 pc.x=30;
  ...............
}
Run Code Online (Sandbox Code Playgroud)

这背后的原因是什么,在Friendclass中,成员x不接受为其赋值,在不是Childclass的情况下表现为私有成员.

java access-modifiers

2
推荐指数
1
解决办法
7177
查看次数

"对象引用未设置为对象的实例"错误

我有问题弄清楚为什么我接收"未设置为对象实例的对象引用"此表示层中的错误:

TempAccountManager.Accounts.Add(tempAccount);

我已经使用Visual Studios调试器和帐户获取创建了代码.我相信我有一个访问模块的问题,不确定.

表达层

using myBudget.BusinessObject;
using myBudget.BusinessLogic;

namespace myBudget
{
    public partial class NewBudgetWizard : Form
    {

        public int CurrentStep { get; set; }

        public Account TempAccount = new Account();
        public AccountManager TempAccountManager = new AccountManager();

        public NewBudgetWizard()
        {

        private void createAccountList(ListView lvAccounts)
        {

            foreach (ListViewItem lvi in lvAccounts.Items)
            {

                int tempAccNumber = Int32.Parse(lvi.SubItems[0].Text);
                string tempAccName = lvi.SubItems[1].Text;
                string tempAccType = lvi.SubItems[2].Text;
                decimal tempAccBalance = decimal.Parse(lvi.SubItems[3].Text, System.Globalization.NumberStyles.Currency);

                Account tempAccount = new Account(tempAccNumber, tempAccName, tempAccType, tempAccBalance, DateTime.Now);
                TempAccount = …
Run Code Online (Sandbox Code Playgroud)

c# oop access-modifiers object-reference nullreferenceexception

2
推荐指数
1
解决办法
2541
查看次数

用于设置不同修改器以获取/设置的单行程

我现在就是这样做的:

protected bool __myMember = true;
bool myMember { public get { return __myMember; } protected set { __myMember = value; } }
Run Code Online (Sandbox Code Playgroud)

这是我理想的做法(或非常类似的东西):

public-get protected-set bool myMember = true;
Run Code Online (Sandbox Code Playgroud)

这可能吗?或者还有其他方法可以缩短我目前的工作方式吗?我应该这样做吗?

也许解决方案是如果我们可以在csharp中创建修饰符......但我怀疑我们可以.

c# access-modifiers getter-setter

2
推荐指数
1
解决办法
1280
查看次数

为什么我无法在派生类中访问受保护的属性

我有两个课程,这是我的代码:

//My Base class
public class People
    {
       public People()
       {
       }

        protected string name;

        protected string Name
           {
        get 
        {
            return this.name;
        }
        set 
        {
            this.name = value;
        }
    }

    }

//The Child class 

public class Student:People
    {
        private int id;

        public Student()
        { 
        }

        public Student (int id, string name)
        {
            this.id = id;
            this.Name = name;
        }

        public int ID
        {
            get
            {
                return this.id;
            }

            set

            {
                this.id = value;
            }

        }
    }
Run Code Online (Sandbox Code Playgroud)

当我创建Student类的实例(如下面的实例)时,我无法从父类People中访问NAME属性。

 public partial …
Run Code Online (Sandbox Code Playgroud)

c# polymorphism access-modifiers

2
推荐指数
1
解决办法
5312
查看次数

C#Multiple Interface Inheritance不允许具有相同名称的公共访问修饰符

所以这让我感到困惑.
假设有两个接口.

public interface a
{
    void foo();
}

public interface b
{
    void foo();
}
Run Code Online (Sandbox Code Playgroud)

这两个接口都有一个函数foo,我有一个提供显式实现的类:

public class alpha : a, b
{
    // why can't I put an access modifier here?
    // How would you be able to hide this from a derived class
    void a.foo()
    {
        Console.WriteLine("a");
    }

   void b.foo()
    {
        Console.WriteLine("b");
    }
}
Run Code Online (Sandbox Code Playgroud)

还有一个派生自alpha的类

public class beta : alpha
{
}
Run Code Online (Sandbox Code Playgroud)

你如何使foo私有或受保护,因为alpha不允许在显式的imlementation上访问修饰符,什么可以阻止某人调用:

var be = new beta();
(be as b).foo();
Run Code Online (Sandbox Code Playgroud)

编辑

为什么我没有明确提供实现我可以提供访问修饰符?

public class alpha : …
Run Code Online (Sandbox Code Playgroud)

c# encapsulation interface access-modifiers multiple-inheritance

2
推荐指数
2
解决办法
245
查看次数

访问其他形式的私有方法

如何从一种形式访问私有方法到另一种形式?

例如,我在Form1中有这个方法:

Form1中:

private void Test (){}
Run Code Online (Sandbox Code Playgroud)

那么如何在Form2中访问该方法(private void Test),以便我在Form2中输入的值将在方法Test中发送?

Test是一个datagridview,在表单2中,我必须在其中输入带有相应值的Name,如果我按下save按钮,它应该自动保存在Form1中的datagridview中.

c# access-modifiers winforms

2
推荐指数
1
解决办法
1254
查看次数