是否可以选择为两个变量执行一个setter/getter?或者唯一的选择是两个单独的setter/getter,如下所示:
int var1;
int var2;
public int var1
{
get { return var1; }
set { var1 = value; }
}
public int var2
{
get { return var2; }
set { var2 = value; }
}
Run Code Online (Sandbox Code Playgroud) 在VB.NET中,我注意到我可以直接使用Property关键字,然后再使用属性名称和数据类型来创建属性,而无需使用getter和setter方法,尽管我无法在C#中做到这一点!
但是,似乎将此属性封装起来,就像将其放入getter和setter方法一样!
请看下面的截图。
在上面的屏幕截图中,我要谈论的属性是number1,并且我创建了另一个封装在名为number2的getter和setter方法中的属性。
然后,我在Class2中创建了Class1的新实例,但是我注意到在创建类的实例之前,number1属性是不公开的,就像它被封装在类似于number2属性的getter和setter方法!
有什么解释吗?
我正在尝试将数据填充到我的表视图中,一切看起来都很好,但仍然没有显示数据。这是代码。一切似乎都很好,但桌面视图没有显示任何内容。连眼睛都不眨一下……
public class MainPage implements Initializable {
@FXML
private AnchorPane root;
@FXML
private Button main_LogOut;
@FXML
private ComboBox<?> main_Clients;
@FXML
private ComboBox<?> main_Users;
@FXML
private TableView<customerDetails> table;
@FXML
private TableColumn<customerDetails, String> clientId;
@FXML
private TableColumn<customerDetails, String> clientName;
@FXML
private TableColumn<customerDetails, String> clientEmail;
@FXML
private TableColumn<customerDetails, String> clientRequirement;
@SuppressWarnings("unchecked")
@Override
public void initialize(URL arg0, ResourceBundle arg1) {
// TODO Auto-generated method stub
clientId.setCellValueFactory(new PropertyValueFactory<customerDetails,String> ("Id"));
clientName.setCellValueFactory(new PropertyValueFactory<customerDetails, String>("name"));
clientEmail.setCellValueFactory(new PropertyValueFactory<customerDetails, String>("email"));
clientRequirement.setCellValueFactory(new PropertyValueFactory<customerDetails, String>("Requirements"));
table=new TableView<customerDetails>();
table.setItems(getClients());
table.getColumns().addAll(clientId,clientName,clientEmail,clientRequirement);
}
@FXML
void …Run Code Online (Sandbox Code Playgroud) 为什么即使没有实现 setter 也可以设置二维数组?
这是我的代码。
public static void Main()
{
var obj = new TestObj();
obj.qwe[0, 0] = 6;
obj.asd = 7; //error
Console.WriteLine(obj.qwe[0, 0]); //6
}
public class TestObj
{
public int[,] qwe { get; } = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };
public int asd { get; } = 4;
}
Run Code Online (Sandbox Code Playgroud) 我想将描述符动态绑定到类的属性。
例如,我有这个描述符(它只是一个虚拟示例):
class Item(object):
def __init__(self, filename):
self.filename = filename
def __get__(self, obj=None, objtype=None):
#print '__get__(%s, %s)' % (obj, objtype)
return open(self.filename).read()
def __set__(self, obj, val):
#print '__set__(%s, %s)' % (obj, val)
open(self.filename, 'w').write(str(val))
Run Code Online (Sandbox Code Playgroud)
在我的主容器中,我想动态注册我的描述符。
如果我在类级别实例化描述符,一切都会很好:
class Container(object):
foo = Item('foo')
bar = Item('bar')
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我尝试使用动态关联描述符时,setattr我需要给我的类添加更多的复杂性:
class Container(object):
def __init__(self, data):
for attr in data:
super(Container, self).__setattr__(attr, Item(attr))
def __setattr__(self, name, value):
#print '__setattr__(%s, %s)' % (name, value)
attr = super(Container, self).__getattribute__(name)
if hasattr(attr, '__set__'):
attr.__set__(name, value)
else:
super(Container, …Run Code Online (Sandbox Code Playgroud) C++ 类是否有可能像我们在 Java 中一样包含自己类型的实例?例如,这样的事情:
public class A {
private A a1;
private A a2;
A getA1(){
return a1;
}
A getA2(){
return a2;
}
void setA1(A a1){
this.a1 = a1;
}
void setA2(A a2){
this.a2 = a2;
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想在 C++ 中做同样的事情或解决方法。
我一直想知道为什么人们在PHP中使用getter/setter而不是使用公共属性?
从另一个问题,我复制了这段代码:
<?php
class MyClass {
private $firstField;
private $secondField;
public function __get($property) {
if (property_exists($this, $property)) {
return $this->$property;
}
}
public function __set($property, $value) {
if (property_exists($this, $property)) {
$this->$property = $value;
}
return $this;
}
}
?>
Run Code Online (Sandbox Code Playgroud)
我认为这与使用公共字段没有区别.
好吧,我知道它可以帮助我们验证getter和setter中的数据,但上面的例子并不适合它
我一直在寻找时间来寻找一种在JetBrains C#IDE Rider中生成类似Java的getter和setter的方法。
有谁知道我该怎么做才能真正更改那些奇怪的C#getter和setter的布局?
我想让Rider从以下位置生成getter和setter转换:
public Transform List
{
get { return list; }
set { list = value; }
}
Run Code Online (Sandbox Code Playgroud)
对此
public Transform getList(){ return this.list; }
public void setList(Transform list){ this.list = list; }
Run Code Online (Sandbox Code Playgroud) 如何将类中的变量调用到另一个文件示例:
Controller.php这样
<?php
class hello {
public $var = 1;
public function a(){
......
}
public function b(){
.....
}
}
?>
Run Code Online (Sandbox Code Playgroud)
的index.php
<?php
$hello = new hello;
//how to call the $var ? HERE
?>
Run Code Online (Sandbox Code Playgroud) 我试图从PHP移植一些代码,基本归结为属性重载.也就是说,如果你试图获取或设置一个实际上没有被定义为类的一部分的类属性,它会将该信息发送给一个几乎可以用它做任何事情的函数.(在这种情况下,我想在放弃之前在类中搜索关联数组.)
但是,Perl与PHP有很大的不同,因为类已经是哈希.有没有什么方法可以将一些等效的__get()和应用__set()到Perl"类"中,它仍将完全封装在该包中,对于试图实际获取或设置属性的任何内容都是透明的?
编辑:解释这个的最好方法可能是向您显示代码,显示输出,然后显示我想要输出的内容.
package AccessTest;
my $test = new Sammich; #"improper" style, don't care, not part of the question.
say 'bacon is: ' . $test->{'bacon'};
say 'cheese is: ' . $test->{'cheese'};
for (keys $test->{'moreProperties'}) {
say "$_ => " . $test->{'moreProperties'}{$_};
}
say 'invalid is: ' . $test->{'invalid'};
say 'Setting invalid.';
$test->{'invalid'} = 'true';
say 'invalid is now: ' . $test->{'invalid'};
for (keys $test->{'moreProperties'}) {
say "$_ => " …Run Code Online (Sandbox Code Playgroud)