为什么是这样?我觉得能够锁定一些扩展方法只能在我的一个类中使用它真的很棒.真的不想在任何地方都有某些扩展方法......而且它们看起来比常规静态方法好得多:P
为了澄清:
我想要这些扩展方法的原因是因为我正在扩展一个Form,它上面有一个DataGridView.而且我对这些行感到厌倦:
foreach(var row in grid.Rows.OfType<DataGridViewRow>().Where(r => (bool) r.Cells[checkBoxColumn.Index].Value))
foreach(var row in grid.SelectedRows.OfType<DataGridViewRow>().Where(r => (bool) r.Cells[checkBoxColumn.Index].Value))
Run Code Online (Sandbox Code Playgroud)
想要一个扩展方法,以便我可以做到
foreach(var row in grid.Rows.CheckedRows())
foreach(var row in grid.SelectedRows.CheckedRows())
Run Code Online (Sandbox Code Playgroud)
换句话说,这个扩展方法在这个类之外根本没用.但它会使代码更清洁.当然可以制定常规方法,这就是我最终做的事情,因为这是不可能的.
Aaanyways,我只是想知道是否有人有一些很好的论据,为什么他们选择在这里使用扩展方法创建这样的限制.必须在静态类中才有意义.不能在嵌套的静态类中不...至少对我来说......
在Enumeration#Val类的Scaladoc中,我可以读到:"实现Value类型的类.可以重写此类以更改枚举的命名和整数标识行为." 我很困惑:如何覆盖一个类?override class Val extends super.Val不允许这样的事情.
在下面的例子中(道歉为长度)我试图隔离一些在私有继承自另一个类的类中使用嵌套类时遇到的意外行为.我经常看到这样的陈述:与未使用的类相比,嵌套类没有什么特别之处,但是在这个例子中可以看到嵌套类(至少根据GCC 4.4)可以看到一个嵌套类的公共类型定义由结束类私有继承的类.
我很欣赏typdef与成员数据不一样,但我发现这种行为令人惊讶,我想其他许多人也会这样.所以我的问题是双重的:
#include <iostream>
class Base {
typedef int priv_t;
priv_t priv;
public:
typedef int pub_t;
pub_t pub;
Base() : priv(0), pub(1) {}
};
class PubDerived : public Base {
public:
// Not allowed since Base::priv is private
// void foo() {std::cout << priv << "\n";}
class Nested {
// Not allowed since Nested has no access to PubDerived member data
// void foo() {std::cout << pub << "\n";}
// Not allowed since typedef Base::priv_t is private …Run Code Online (Sandbox Code Playgroud) 所以,如果你尝试做这样的嵌套类:
//nestedtest.php
class nestedTest{
function test(){
class E extends Exception{}
throw new E;
}
}
Run Code Online (Sandbox Code Playgroud)
你会收到一个错误 Fatal error: Class declarations may not be nested in [...]
但如果你在一个单独的文件中有一个类,如下所示:
//nestedtest2.php
class nestedTest2{
function test(){
include('e.php');
throw new E;
}
}
//e.php
class E Extends Exception{}
Run Code Online (Sandbox Code Playgroud)
那么,为什么第二种hacky方式可以正常工作,但这种非hacky方式不起作用?
假设我在库中有以下Java文件:
package test;
public abstract class AbstractFoo {
protected static class FooHelper {
public FooHelper() {}
}
}
Run Code Online (Sandbox Code Playgroud)
我想从Scala扩展它:
package test2
import test.AbstractFoo
class Foo extends AbstractFoo {
new AbstractFoo.FooHelper()
}
Run Code Online (Sandbox Code Playgroud)
我收到一个错误,"无法在对象test.AbstractFoo中访问类FooHelper".(我每晚都使用Scala 2.8).以下Java正确编译:
package test2;
import test.AbstractFoo;
public class Foo2 extends AbstractFoo {
{ new FooHelper(); }
}
Run Code Online (Sandbox Code Playgroud)
如果Scala版本放在test包中,它也会编译.还有另一种方法可以让它编译吗?
声明一个可以在另一个Activity类中扩展Activity的类可能吗?如果是,我将如何在清单中注册该类?那么,这是可以合理完成的事情还是一个坏主意?
我在想类似的东西
class ListClass extends ListActivity{
...
ArrayList items;
class ItemClass extends Activity{
...
Item item;
@Override
onCreate(){
Integer pos = getIntent().getExtras().getInt("pos");
item = items.get(pos);
}
}
@Override
onItemClick(int position){
startActivity(new Intent(this, ItemClass.class).putExtra("pos", position));
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,语法显然不是100%正确,主要是伪代码.
android nested-class inner-classes listactivity android-activity
我有一个带有一些内部变量的C类.它有一个嵌套的类N,它想要访问C中的变量.虽然C有一些静态方法和变量,但C和N都不是静态的.当我尝试从NI访问C中的非静态变量时,得到波浪线下划线和消息"无法在静态上下文中访问非静态字段[fieldname]".
这似乎与嵌套类有关,因为我可以从封闭类本身访问变量.
ReSharper建议我使_t静态,但这不是一个选项.我该如何处理?
public sealed partial class C
{
string _t;
class N
{
void m()
{
_t = "fie"; // Error occurs here
}
}
}
Run Code Online (Sandbox Code Playgroud) XAML中的DataTemplate可以与嵌套类相关联吗?
我正在研究MVVM应用程序,我遇到了数据模板问题.我有一个视图模型,为项目控件提供其他视图模型的集合.这些项是在外部视图模型中定义为嵌套类的层次结构的一部分.到目前为止,我还无法在XAML中创建一个映射来引用内部嵌套类.
这是类层次结构(为简洁起见而简化):
public class MainViewModel
{
public class A
{
}
public class B : A
{
}
public class C : A
{
}
public ObservableCollection<A> Items
{
get;
set;
}
}
Run Code Online (Sandbox Code Playgroud)
在XAML中,我正在尝试将DataTemplate映射到类型B和C,但我无法完全限定嵌套类名.
<ItemsControl ItemsSource="{Binding Path=Items}">
<ItemsControl.Resources>
<DataTemplate DataType="{x:Type ns:BracingViewModel.B}">
<Grid>
....
</Grid>
</DataTemplate>
<DataTemplate DataType="{x:Type ns:BracingViewModel.C}">
<Grid>
....
</Grid>
</DataTemplate>
</ItemsControl.Resources>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud)
问题:对嵌套类的引用在XAML中显示为构建错误.我得到以下内容:
Error 5 Cannot find the type 'ns:B'. Note that type names are case sensitive. Line...
Error 5 Cannot find the type 'ns:C'. Note that …Run Code Online (Sandbox Code Playgroud) 当我尝试创建一个新的'Flow'类时,嵌套类('Action')总是在控制器中返回null
所以我在类中有这样的类:
public class Flow
{
private Action actionField
private string nameField
private bool enabledField
...
}
public class Action
{
private ActionSchedule actionScheduleField
private ActionParameter actionParameterField
private nameField
}
public class ActionSchedule
...
Run Code Online (Sandbox Code Playgroud)
并为"流量"创建一个单独的视图
@model ProjectZeus.Models.Flow
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
@Html.TextBoxFor(model => model.name, new { @placeholder = "Flow name" })
@Html.ValidationMessageFor(model => model.name)
@Html.LabelFor(model => model.enabled)
@Html.EditorFor(model => model.enabled)
@Html.ValidationMessageFor(model => model.enabled)
@Html.Partial("FlowAction")
...
Run Code Online (Sandbox Code Playgroud)
然后是每个子类的部分视图
@model ProjectZeus.Models.FlowAction
@Html.TextBoxFor(model => model.name, new { @placeholder = "Action name" })
... …Run Code Online (Sandbox Code Playgroud) 假设我有一个类型为std :: vector :: iterator的变量x,它被分配(出于其他原因)并且放置为new,例如
new((void*)&x) std::vector<int>::iterator();
Run Code Online (Sandbox Code Playgroud)
如何以符合标准的方式调用析构函数?干
x.std::vector<int>::iterator::~iterator();
Run Code Online (Sandbox Code Playgroud)
例如在gcc中工作但不是clang.
nested-class ×10
c# ×3
c++ ×2
scala ×2
android ×1
asp.net-mvc ×1
datatemplate ×1
destructor ×1
enums ×1
inheritance ×1
interop ×1
java ×1
listactivity ×1
mvvm ×1
overriding ×1
php ×1
templates ×1
typedef ×1
visibility ×1
wpf ×1
xaml ×1