标签: access-modifiers

C#:在实现的方法中明确指定接口

为什么在实现接口时,如果我将方法设为公共,我不必显式指定接口,但如果我将其设为私有,我必须...像这样(GetQueryString是IBar的方法):

public class Foo : IBar
{
    //This doesn't compile
    string GetQueryString() 
    {
        ///...
    }

    //But this does:
    string IBar.GetQueryString() 
    {
        ///...
    }
}
Run Code Online (Sandbox Code Playgroud)

那么为什么在私有方法时必须明确指定接口,而不是在方法公开时?

c# interface access-modifiers

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

StructureMap 2.5和内部实现者

是否可以使这些东西工作(某种方式强制Objectfactory创建像Activator这样的实例)

在下面的例子中,所有东西都放在一个sigle组件中

public interface IUnitOfWorkFactory
{
    IUnitOfWork Create();
}

internal class NHUnitOfWorkFactory : IUnitOfWorkFactory
{
    public IUnitOfWork Create()
    {
        ////  do needed stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

引导:

ObjectFactory.Configure(x =>
{
    x.ForRequesedType<IUnitOfWorkFactory>.TheDefaultIsConcreteType<NHUnitOfWorkFactory>();
}); 
Run Code Online (Sandbox Code Playgroud)

用法:

IUnitOfWorkFactory factory = ObjectFactory.GetInstance<IUnitOfWorkFactory>();
Run Code Online (Sandbox Code Playgroud)

我的结果:

Porktal.Core.Tests.UnitOfWorkTests.Can_Start_Unit_of_Work : StructureMap.StructureMapException : StructureMap Exception Code:  207
Internal exception while creating Instance 'Porktal.Core.Data.NH.NHUnitOfWorkFactory, Porktal.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' of PluginType Porktal.Core.Data.IUnitOfWorkFactory.  Check the inner exception for more details.
---- System.MethodAccessException : Porktal.Core.Data.NH.NHUnitOfWorkFactory..ctor()
Stack Trace:
   at StructureMap.Pipeline.ConfiguredInstanceBase`1.StructureMap.Pipeline.IConfiguredInstance.Build(Type pluginType, BuildSession session, InstanceBuilder builder)
   at StructureMap.Pipeline.ConfiguredInstanceBase`1.build(Type …

.net c# structuremap access-modifiers

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

为什么C#不允许在析构函数上使用访问修饰符?

我正在为一个小项目创建一个简单的类,并决定只为快速impl添加一个析构函数而不是使用IDisposable,每当有一个带有访问修饰符的析构函数时,我就遇到了编译器错误.

public class MyClass
{
    public ~MyClass()
    {
        // clean resources
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试过公共,私有,受保护和内部.没有访问修饰符,它工作正常.由于这篇文章显示 ~destructor本质上是一个受保护的Finalize函数的合成糖,因此我觉得奇怪的是你不能在析构函数上使用至少受保护的东西.文章确实说"无法调用析构函数.它们会被自动调用." 这是如何强制执行该行为的?

我最后只是实现IDisposable了,但我很好奇...... 还有其他原因你不能在析构函数上放置访问修饰符吗?

c# destructor access-modifiers

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

使用保留包名访问包 - 私有变量

我正在研究源代码,java.util.HashMap我想看看hashcode函数在Entrys 的内部数组(这是一个软件包私有变量)中分配密钥的效果如何.所以我java.util在我的项目中创建了一个名为查看天气I 的软件包可以欺骗编译器认为它是相同的包.令人惊讶的是它工作,我写了以下代码:

package java.util;

public class HashMapExt<K, V> extends HashMap<K, V> implements Map<K, V> {

    public static void main(String[] args) {
        HashMapExt<Integer, String> mp = new HashMapExt<Integer, String>();
        mp.put(1, "Hello");
        mp.put(2, "Map");
        mp.put(3, "Extention");
        mp.printData();
    }

    void printData() {

        System.out.println(Arrays.toString(table));
    }
}
Run Code Online (Sandbox Code Playgroud)

它成功编译但在运行时它给出了一个例外:

Exception in thread "main" java.lang.SecurityException: Prohibited package name: java.util
    at java.lang.ClassLoader.preDefineClass(Unknown Source)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$000(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at …
Run Code Online (Sandbox Code Playgroud)

java access-modifiers

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

将C++成员函数声明为static const会产生错误

我有以下类接口:

class Test
{
public: 
    Test();
    static void fun() const;

private:
    int x;
    static int i;
};
Run Code Online (Sandbox Code Playgroud)

Test.cpp包含fun()的实现:

void Test::fun() const
{
   cout<<"hello";
}
Run Code Online (Sandbox Code Playgroud)

它给了我错误...... modifiers not allowed on static member functions

错误是什么意思?我想知道为什么我无法创建静态和const的函数.

c++ access-modifiers

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

使类在程序集之外不可见

让我们说我有班级狗:

public class Dog {
    public String Breed { get; set; }
    public String Color { get; set; }
    ...
}
Run Code Online (Sandbox Code Playgroud)

和一类动物:

public class Animals {
    public Dog[] Dogs { get; set; }

    public Dog[] GetDogs() {
        ...
        return Dogs;
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

上面的类在我的类库中,我添加它作为我的项目的参考..一切正常但我想要的是谁使用这个库不应该能够使用类Dog,我的意思是他不应该做某事喜欢Dog dog = new Dog();.我试图让它内部,但是,我必须在课堂上写内部Animals,如果我这样做,我不能使用GetDogs()方法.

有什么建议?

c# class access-modifiers

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

如果我声明一个内部类,内部成员的默认访问级别是什么?

我正在构建一个具有一些基本功能的DLL.长话短说,我正在制作一些静态类供开发者使用.这些类使用其他一些做脏工作的类,我将其标记为内部,因为我不希望人们访问它们.

问题是:如果我将一个类声明为内部类,那么其成员的访问级别是什么?

我必须将其所有成员标记为内部,否则它们会自动标记为内部成员?

这是一个好2小时,我正在和谷歌搜索在搜索计算器,我努力寻找一个清晰而直接的答案不包括1000揣测,技术不太可能hypotesis和无用的装饰...

MSDN像往常一样令人困惑(从未在msdn上找到明确的答案).

从我在这里可以阅读http://msdn.microsoft.com/en-us/library/ms173121.aspx我想无论你如何设置类访问级别,他的所有成员都将是私有的(方法,变量等等)上).

救命,我不知道

c# access-modifiers internal member

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

当我们有访问器和mutator时,为什么要声明私有字段?

如果我用Java创建一个类,我总是被告知惯例是使一个类的所有字段都是私有的.如果我需要访问或更改它们,我可以创建一个accessor和mutator方法.我确实理解私有变量的重要性,因为它们有助于降低复杂性并允许封装.

我不明白的是,如果我创建一个公共访问者和mutator方法,那么那个变量是不是公共?为什么在任何人都可以访问私有变量的情况下仍然使用私有变量?

我还应该注意,我理解这些方法的重要性,但我想知道为什么我们懒得将变量设为私有,即使我们通过这些方法让任何人都可以访问它?

java oop access-modifiers

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

无法访问派生类中的受保护方法

我不明白为什么这段代码会给我一个Intellisense错误.

public abstract class Node
{
    protected abstract string ToText();
}

public class HtmlNode : Node
{
    public List<Node> ChildNodes { get; set; }

    protected override string ToText()
    {
        StringBuilder builder = new StringBuilder();

        foreach (var node in ChildNodes)
            builder.Append(node.ToText());  // <=== THIS IS THE ERROR

        return builder.ToString();
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面指出的行上,我收到错误:

错误CS1540:无法通过类型为"Node"的限定符访问受保护成员'Node.ToText()'; 限定符必须是'HtmlNode'类型(或从中派生)

HtmlNode派生自Node,为什么不能HtmlNode访问受保护的成员Node

我将如何修改代码以使用"类型的限定符HtmlNode",如错误消息中所示?

.net c# oop access-modifiers

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

私人保护和内部保护之间的区别

C#7.2介绍了private protected修饰符,它的区别是internal protected什么?

来自doc:

私有受保护成员可以通过从包含类派生的类型访问,但只能在其包含的程序集中访问.

这究竟是什么internal protected呢?

c# access-modifiers

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

标签 统计

access-modifiers ×10

c# ×7

.net ×2

java ×2

oop ×2

c++ ×1

class ×1

destructor ×1

interface ×1

internal ×1

member ×1

structuremap ×1