首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >强制获取/设置私有属性的私有变量的访问权限

强制获取/设置私有属性的私有变量的访问权限
EN

Stack Overflow用户
提问于 2009-05-11 15:58:42
回答 6查看 4.1K关注 0票数 6

如果我有一个私有变量,我想对其进行一些内部验证,并希望将该验证保存在一个地方,我会将其放在getter/setter后面,并仅通过该getter/setter访问它。这在处理公共属性时很有用,因为其他代码不能访问私有变量,但是当我处理类本身内部的对象时,有没有办法强制使用getter/setter?

代码语言:javascript
运行
AI代码解释
复制
  private int _eyeOrientation;

  private int eyeOrientation
  {
     get
     {
        return _eyeOrientation;
     }
     set
     {
        if (value < 0)
        {
           _eyeOrientation = 0;
        }
        else
        {
           _eyeOrientation = value % 360;
        }
     }
  }

这里的问题是,类中的其他函数可能会意外地修改

_eyeOrientation = -1;

这会使程序陷入混乱。有没有办法让它抛出一个编译器错误?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-05-11 16:30:58

听起来你需要一个角度类型。

代码语言:javascript
运行
AI代码解释
复制
// Non mutable Angle class with a normalized, integer angle-value
public struct Angle
{
  public Angle(int value)
  {
    Value = value;
  } 

  private angle;
  public Value 
  { 
    get { return angle; } 
    private set { angle = Normalize(value); } 
  }

  public static int Normalize(int value)
  {
     if (value < 0) return 360 - (value % 360);
     return value % 360;
  }
}

public class SomeClass
{
  public Angle EyeOrientation { get; set; }
}

如果你有一个特定类型的值,比如角度、金钱、权重等等,最好把它变成自己的类型,即使这个值本身存储在int、decimal等类型中,这种类型也会让你的接口更清晰、类型更安全。如果你期望一个角度或整数值作为某些方法的参数,这是不一样的。

票数 10
EN

Stack Overflow用户

发布于 2009-05-11 16:14:15

一般来说,您不应该担心这一点。如果您不想将检查放在类本身中,类成员仍然可以使用这些属性。

如果您的类变得太大,以至于您不再信任类中的方法,我认为是时候开始重构并将其分解为更易于管理的更小的类了。

票数 9
EN

Stack Overflow用户

发布于 2009-05-11 16:11:09

你可以在一个嵌套的类中定义它。

代码语言:javascript
运行
AI代码解释
复制
public class NeedsEye
{

    Eye _eye = new Eye();

    public NeedsEye()
    {
        // now, here, any access to the property must be made through the
        // _eye variable. The Eye class has access to any of the properties
        // and members of the NeedsEye class, but the NeedsEye class has not
        // any access to members of the Eye class.
    }

    private class Eye
    {
        private int _orientation;

        public int Orientation 
        {
            get { return _orientation; }

            if (value < 0)
            {
               _eyeOrientation = 0;
            }
            else
            {
               _eyeOrientation = value % 360;
            }     
        }
    }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/850586

复制
相关文章
私有属性/方法的访问
在属性/方法名前有双下划线的,称为私有属性/方法,私有属性/方法外部不能直接访问,
py3study
2020/01/17
1.9K0
ios 如何访问私有变量
方式二: 假如我们不知TestObject有哪些属性,所以我们可以利用RunTime获取所有属性
赵哥窟
2018/09/13
2.2K0
私有变量
构造函数的私有变量,属性和方法都是独立的。 1 window.onload = function() { 2 var person = new Person("Li"); 3 alert(person.getName()); // Li 4 person.setName("Joe"); 5 alert(person.getName()); // Joe 6 7 var person2 = new Person("Ji");
就只是小茗
2018/12/12
6370
【Python】面向对象 - 封装 ② ( 访问私有成员 | 对象无法访问私有变量 / 方法 | 类内部访问私有成员 )
在 类外部 创建的 Student 实例对象 , 是无法访问 __address 私有成员的 ;
韩曙亮
2023/10/11
3630
【Python】面向对象 - 封装 ② ( 访问私有成员 | 对象无法访问私有变量 / 方法 | 类内部访问私有成员 )
C# 使用反射获取私有属性的方法
本文告诉大家多个不同的方法使用反射获得私有属性,最后通过测试性能发现所有的方法的性能都差不多
林德熙
2022/08/04
1.8K0
Python对象的私有属性和私有方法
1. 在实际开发中,对象的某些属性或方法可能只希望在对象的内部被使用,而不希望在外部被访问到
python自学网
2022/09/06
1.6K0
Python对象的私有属性和私有方法
Python 私有函数和私有变量
私有函数和私有变量 什么是私有函数和私有变量 无法被实例化后的对象调用的类中的函数与变量 类的内部可以调用私有函数与变量 只希望类内部业务调用使用,不希望被使用者使用 私有函数与私有变量的定义方法 在一个变量或函数前添加__(2个下横线),变量或函数名后边无需添加 class Person(object): def __init__(self, name): self.name = name self.__age = 33 # 私有 def dump(self): print(
Zkeq
2022/05/18
9960
python类的私有变量
1)_xx 以单下划线开头的表示的是protected类型的变量。即保护类型只能允许其本身与子类进行访问。若内部变量标示,如:当使用“from Mimport”时,不会将以一个下划线开头的对象引入。
py3study
2020/01/15
1.3K0
Python 私有属性和私有方法
其中__secret这个私有方法只能在类中调用,所以外部对象实例想要获取私有方法或者私有属性,那么就需要定义一个公有的方法来传递数值。
Devops海洋的渔夫
2019/05/31
1.4K0
Windows 10 如何设置网络属性为私有
通过上面的选择,你可以调整的网络属性为 Public 或者 Private 的属性。
HoneyMoose
2021/06/12
4.5K0
Windows 10 如何设置网络属性为私有
C# 使用反射获取私有属性的方法 测试
本文告诉大家多个不同的方法使用反射获得私有属性,最后通过测试性能发现所有的方法的性能都差不多
林德熙
2019/03/13
2.3K0
Python类中的私有属性和私有方法
Python是面向对象的语言,在Python里一切皆对象,所以大部分情况下,我们都是通过类的方式来编程。
Python碎片公众号
2021/02/26
3.1K0
Python类中的私有属性和私有方法
python——“破解”私有属性
#coding:utf-8 class A:     def __init__(self, name, age, pwd):         self.__name = name         self.__age = age         self.__pwd = pwd     def decrypt(self, passwd):         if passwd == self.__pwd:             print({"name":self.__name, "age":self.
py3study
2020/01/14
6300
JavaScript实现私有属性
JavaScript被很多人认为并不是一种面向对象语言,原因有很多种,比如JavaScript没有类,不能提供传统的类式继承;再比如JavaScript不能实现信息的隐藏,不能实现私有成员。本文并不是为了打破以上误解(实际上笔者自己也有困惑),只是简单介绍几种JavaScript实现私有属性的方式,以及各自的优劣。 1. 基于编码规范约定实现方式 很多编码规范把以下划线_开头的变量约定为私有成员,便于同团队开发人员的协同工作。实现方式如下: function Person(name){ this._na
寒月十八
2018/01/30
9790
java内部类----安全问题-----访问外围类的私有变量
这个是有风险的,因为任何人都可以通过access$0方法很容易的读取到外围类的私有域
wust小吴
2019/07/05
1.6K0
Python中私有变量和私有方法芳
Python中要想定义的方法或者变量只能在类内部使用不被外部使用,可以在方法和变量前面加两个下划线,让其变为私有方法或私有变量。类外部可以通过 ”_类名__私有属性(方法)名“ 访问私有属性(方法)。
王大力测试进阶之路
2022/06/07
1.4K0
「python」私有属性和私有方法(扩展知识)
3.代码:子类对象可以通过父类公有方法访问到父类私有属性和方法,在上述代码中并没有动过子类的任何代码。
python自学网
2022/09/07
1.2K0
「python」私有属性和私有方法(扩展知识)
python 公有属性和私有属性
------------------------------------------------------------------
py3study
2020/01/13
1.3K0
私有构造方法强制不可实例化的性质
有时想编写只有静态方法和静态字段的类。这种类很不好,因为有些人滥用在OOP 语言编写面向过程的程序,但确有用途。 可用 java.lang.Math 或 java.util.Arrays 这种类,把基本类型的值或数组类型的方法组织起来。 还可以用于对以 java.util.Collections 的方式,把实现特定接口的对象上的静态方法组织起来。( Java 8,可以将这些方法放入接口中,假设是你自己编写的可以修改)。最后,这些类还可把 final 类上的方法组织,因为不能将它们放在子类。
JavaEdge
2021/02/22
6820
私有构造方法强制不可实例化的性质
C/C++黑魔法-无限制访问私有属性
  有些人却认为,我的就是我的,不要你觉得,我要我觉得。即使不能直接访问私有成员,我也要找其他的方式来访问。来看看有哪些访问私有属性的方法吧。
Qt君
2020/02/10
1.2K0

相似问题

授予私有访问权限属性

10

链接公共变量和私有变量(具有对私有变量的写访问权限)

30

从私有变量获取属性

20

使用反射获取私有属性的私有属性

21

阻止访问私有成员变量?强制使用公共属性?

90
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档