标签: internal

内部接口*less*可访问内部受保护的构造函数?

我有一个接口和一个在同一个程序集中定义的抽象基类:

IFoo.cs:

internal interface IFoo { ... }
Run Code Online (Sandbox Code Playgroud)

Base.cs:

public abstract class Base
{
    internal protected Base(IFoo foo) { ... }
}
Run Code Online (Sandbox Code Playgroud)

这会生成以下编译器错误:

CS0051: Inconsistent accessibility: parameter type 'IFoo' is less
        accessible than method 'Base.Base(IFoo)'
Run Code Online (Sandbox Code Playgroud)

如果我将Base类构造函数设置为仅内部,则错误消失.由于该类是抽象的,可能在可访问性中添加受保护并不能完成任何事情......

不过,我不明白这个错误.MSDN将'protected internal'定义为

"访问仅限于当前程序集或从包含类派生的类型"

内部接口IFoo如何比内部受保护的构造函数更难访问?

c# protected internal

8
推荐指数
1
解决办法
2093
查看次数

如何在单独的类中访问私有构造函数?

我正在用C++编写一个库.我的图书馆里有两门课,A而且B.我想隐藏A()任何引用我的库的代码中的构造函数.我也希望类B能够调用A()构造函数.

我来自C#背景,并且很少记住我的C++.在C#中,我只是将A()构造函数声明为internal.我已经读过,在C++中最接近的方法是friend声明和前向声明的组合.我该怎么做呢?以下是我的三个文件:

啊:

#pragma once
class A
{
    private:
        A();
};
Run Code Online (Sandbox Code Playgroud)

BH

#pragma once
class A;
class B
{
    public:
        A createA();
};
Run Code Online (Sandbox Code Playgroud)

B.cpp:

#include "A.h"
#include "B.h"

A B::createA()
{
    A result; //cannot access private member declare in class 'A'
    return result;
}
Run Code Online (Sandbox Code Playgroud)

我试过把它添加到啊:

public: friend A createA();
Run Code Online (Sandbox Code Playgroud)

我反而尝试将此添加到Ah并带有相应的前向声明:

public: friend A B::createA();
Run Code Online (Sandbox Code Playgroud)

我反而尝试添加和extern class B;Ah并使B成为这样的类:

public: friend class B;
Run Code Online (Sandbox Code Playgroud)

我不知所措. …

c++ internal friend forward-declaration

8
推荐指数
1
解决办法
1万
查看次数

Asp.net MVC4 - 内部服务器500错误 - 仅在发布时

刚刚完成我的第一个mvc4应用程序.一切都很好,直到我部署它,我得到:500 - 内部服务器错误.您正在查找的资源存在问题,无法显示.每次我尝试呼叫/帐户/注册或/帐户/登录控制器:

我在firefox控制台和小提琴手里偷偷摸摸.我没有找到任何有用的东西,但是我再也不知道我应该寻找什么.

其他一些帖子说检查服务器日志,但这本身就是一个问题,因为当我尝试下载,移动,查看或删除最新的日志文件时,我收到"文件传输失败","550无法访问文件"," 500无法删除文件".

我不知道还能做什么,有些请指教.下面是一些用于调用Login控制器的代码.我不会发布注册版本,因为它们似乎相关.

Ajax调用:

$.ajax({
                    url: "/Account/Login",
                    type: "POST",
                    data: $('#loginForm').serialize(),
                    success: function (resultData) {
                        if (resultData.ok) {
                            ...unrelated stuff...has call to resultData.message
                        }
                    }
                });
Run Code Online (Sandbox Code Playgroud)

登录控制器:

    [AllowAnonymous]
    [HttpPost]
    public ActionResult Login(LoginModel model)
    {

        if (ModelState.IsValid)
        {
            if (Membership.ValidateUser(model.UserName, model.Password))
            {
                FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
                return Json(new { ok = true, message = "Login successful." });
            }
            else
            {
                return Json(new { ok = false, message = "The username or password you entered is invalid. Please try again." …
Run Code Online (Sandbox Code Playgroud)

asp.net internal

7
推荐指数
1
解决办法
8911
查看次数

内部班级的公共成员是什么意思?

例如:

internal class C
{
    public void M()
    {
        Console.WriteLine("foo");
    }
}
Run Code Online (Sandbox Code Playgroud)

对我来说,这是一个 " 任何人都可以访问的方法,无论生成在只能从同一程序集中的代码访问的类中的程序集 ".

我对编译器的经验告诉我,如果我做了类似的事情并且没有得到警告,那么可能有一个合理的理由.

所以,我想也是

  1. 我对保护水平的理解缺乏一些东西.
  2. 可能会有警告,但没有警告.

(如果是2,这不是试图抱怨它 - 我只想了解)

c# class internal

7
推荐指数
3
解决办法
680
查看次数

如何创建一个接口,使一些方法保持在C#中进行测试?

考虑以下课程

public class Entity {
  public void Foo() { ... }
  internal void Bar() { ... }
}
Run Code Online (Sandbox Code Playgroud)

如你所见,它有一个public方法和一个internal方法.现在,我想创建一个接口,允许我在测试中模拟这个类(在这个程序集和其他程序集中).我重写我的代码如下:

public interface IEntity {
  void Foo();
}

internal class Entity : IEntity {
  public void Foo() { ... }
  public void Bar() { ... }
}
Run Code Online (Sandbox Code Playgroud)

但是,这会产生另一个问题.当在同一个程序集中的另一个方法中使用该类时,我再也无法调用Bar:

public class OtherClass {
  public void SomeMethod(IEntity entity) {
    entity.Bar(); // error!
  }
}
Run Code Online (Sandbox Code Playgroud)

像这样重写代码:

public class OtherClass {
  public void SomeMethod(IEntity entity) {
    (entity as Entity).Bar(); // …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing interface internal

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

使特定的内部函数对另一个程序集可见(即并非所有内部都可见)

可以[assembly: InternalsVisibleTo("NameOfOtherAssembly")]在 AssemblyInfo.cs 中指定。

但是是否可以将其限制为特定的内部功能?

例如,是否有可以应用于每个功能的属性?

[InternalVisibleTo("NameOfOtherAssembly")]
internal void ShouldBeVisible()
{}

internal void ShouldNotBeVisible()
{}
Run Code Online (Sandbox Code Playgroud)

如果没有,有没有其他方法可以做到这一点?

c# internalsvisibleto internal

7
推荐指数
1
解决办法
2778
查看次数

PHP是否默认将连续的fseek命令优化为一个fseek命令?

我正在运行Windows 7 - 64位,最新的XAMPP版本具有32位PHP版本.

在测试http://php.net/manual/en/function.fseek.php#112647上 有一个非常大的文件(大于PHP_MAX_INT 2147483647)时,我现在很确定,连续跟随fseeks在执行之前总结一下在filepointer上.

我有两个问题:

  1. 我可以用合理的方法解决这个总结(或者只用上面链接中提到的解决方法)吗?

  2. 这种聚合是在PHP中发生的(我假设,虽然我不知道在PHP中的哪个位置)或在Windows 7中?

回答自己:尝试使用多次搜索的两种解决方法对我的系统无效.相反,他们将文件指针放在PHP_MAX_INT下的不同位置.(32位PHP只能搜索到PHP_MAX_INT + 8192.从那里读取仍然是可能的,但我不知道到底有多远.)

因此,对于我的具体情况,这个问题已经过时,因为32位PHP只能访问PHP_MAX_INT + 8192,无论你做什么.我留下这个问题,因为有两个人投了票,可能对一般答案感兴趣.

我在这里提交了一个错误报告:
https://bugs.php.net/bug.php?
id = 69213结果:使用64位PHP构建它可能有用,但我没有尝试.

php performance internal 32bit-64bit windows-7

7
推荐指数
1
解决办法
265
查看次数

读取存储在内部存储器中的pdf(文件路径无效)

我想打开一个存储在Mobile内存中的pdf ...我正在尝试将文件的路径传递给Uri ..但它一直向我显示此错误"文件路径无效"但我确定我正在走正确的道路..

    targetFile=new File("/data/data/package Name/app_mydir/test.pdf");

            }

        Intent intent;
        intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(Uri.fromFile(targetFile), "application/pdf");


               startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

pdf android path internal

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

JavaScript如何在内部存储空值?

我总是想知道JavaScript如何在null内部存储值.null不同于任何价值.我想范围的变量存储在某种结构数组中,每个结构对应一个变量.这个结构是否有某种名为"null"的布尔属性?

我会在V8源代码中自己查找,但我在C++代码中很丢失:(

我在谷歌上找不到任何东西.大多数结果与诸如"如何确定变量是否未定义或为空?"之类的问题有关.或类似的.

javascript c++ null internal

6
推荐指数
1
解决办法
489
查看次数

如何减少或消除__tls_init调用?

我正在使用依赖的第三方库thread_local.这导致我的程序__tls_init()重复调用,即使在某些周期的每次迭代中(我还没有检查所有这些),尽管thread_local变量已经被同一函数中早期的另一个调用无条件地初始化(事实上,在接近开始时)整个节目).

__tls_init()我的第一个指示x86_64

cmpb    $0, %fs:__tls_guard@tpoff
je      .L530
ret
.L530:
pushq   %rbp
pushq   %rbx
subq    (some stack space), %rsp
movb    $1, %fs:__tls_guard@tpoff
Run Code Online (Sandbox Code Playgroud)

所以第一次按每个线程调用它时,值at %fs:__tls_guard@tpoff设置为,1并且进一步调用立即返回.但是,这意味着call每次thread_local访问变量时都会产生所有开销,对吧?

请注意,这是一个静态链接(实际上是生成!)函数,因此编译器"知道"它从这个条件开始,并且完全可以想象流分析发现不必多次调用此函数.但事实并非如此.

是否有可能摆脱多余的call __tls_init指令,或者至少阻止编译器在时间关键的部分发出它们?

实际编译的示例情况:( - O3)

pushq   %r13
movq    %rdi, %r13
pushq   %r12
pushq   %rbp
pushq   %rbx
movq    %rsi, %rbx
subq    $88, %rsp
call    __tls_init              // always gets called
movq    (%rbx), %rdi
call    <some local function>
movq    8(%rax), %r12 …
Run Code Online (Sandbox Code Playgroud)

optimization g++ internal thread-local-storage

6
推荐指数
1
解决办法
301
查看次数