我一直在重构我目前正在进行的项目的代码库,因此除了程序集的范围之外没有用的类/接口应该被声明为内部(而不是公共).但是我遇到了以下代码的问题:
internal interface IFirstInterface
{
...
}
internal interface ISecondInterface
{
IFirstInterface First{ get; }
...
}
public class Implementer : ISecondInterface
{
public IFirstInterface First {get; private set;}
...
}
Run Code Online (Sandbox Code Playgroud)
我的问题:
为什么内部接口的成员必须公开实施?如果在内部类上实现接口,那么实现的成员不应该是内部的吗?这不是一个大问题,因为接口成员无论如何都不会公开访问,因为类是内部的.这似乎与直觉相反.
主要问题是上面的场景,因为我不能有一个IFirstInterface的公共getter,因为它据称是一个内部接口,即我从编译器得到以下错误:
可访问性不一致:属性类型"IFirstInterface"比属性"Implementer.First"更难访问
有没有办法解决?
注意:我意识到这个重构练习可能没什么价值,但我认为这将是一个很好的方式让我更深入地了解内部修饰符的含义.
C Sharp中的'friend'关键字相当于什么?
如何使用'internal'关键字?
我已经读过'内部'关键字是C#中'朋友'的替代品.
我在我的C#项目中使用了一个DLL,我有源代码,但我不想修改现有的代码.我继承了这个类,我可以以任何我想要的方式使用我继承的类.问题是父类中的大多数代码都有受保护的方法.以某种方式使用朋友可以访问或调用这些受保护的方法吗?
我正在开展一个项目,要求我的应用程序能够在活动呼叫期间在语音的上行链路频率上发送DTMF音调.
我的两个条件是:
我花了几天时间做作业,并且我知道当前的SDK /标准API不支持通话中的DTMF发送.但是,通过使用相关的类com.android.internal.telephony
我希望模仿本机Phone应用程序如何做到这一点.我在网站上关注如何使用标准第三方应用程序的内部API.
我还设置了Android OS开发环境,并且能够在模拟器上以调试模式运行Phone应用程序以确定其内部工作方式.
我在股票标准模拟器上尝试了各种方法,但我得到的错误是:
尝试使用android.uid.phone的sharedUserId基于Phone.apk的源安装重命名的应用程序后,我得到:
安装错误:INSTALL_FAILED_SHARED_USER_INCOMPATIBLE
毫无疑问,由于我没有系统证书来签署它.
在尝试根据Phone.apk来源的相关DTMF音调发送代码编写自定义应用程序后,在设置PhoneFactory时出现以下错误;
java.lang.SecurityException:Permission Denial:不允许发送广播android.provider.Telephony.SPN_STRINGS_UPDATED.
毫无疑问,由于Android应用程序没有正确的权限,尽管AndroidManifest.xml设置的权限与Phone.apk相同.
我不知道还能尝试什么.有没有人有什么建议?
先谢谢,西蒙.
我正在尝试为我的用户提供使用外部或内部存储的能力.我正在显示图像和视频(科学性质).将媒体存储在SD卡上时,一切都很好.但是当我在内部存储媒体时,只会显示图像.无论我尝试什么,我在尝试加载和显示存储在applicationcontext.getFilesDir()下的媒体时都会遇到各种错误.
是否有将视频内容设置为此类文件的技巧?
ContentResolver可以帮助我吗?
在相关的说明中,假设存在外部存储是否被视为不良形式?
提前致谢,
希德
下面是一个失败的版本"无法播放视频.抱歉,此视频无法播放".但我有许多其他失败模式.我可以将内部视频复制到临时存储(外部)并播放它,因此这个复制到内部确实创建了一个有效的电影.它只在我尝试直接从内部存储器播放时失败.
videoFile = new File(this.getFilesDir() + File.separator + "test.mp4");
InputStream data = res.openRawResource(R.raw.moviegood);
try {
OutputStream myOutputStream = new FileOutputStream(videoFile);
byte[] buffer = new byte[8192];
int length;
while ( (length = data.read(buffer)) > 0 ) {
myOutputStream.write(buffer);
}
//Close the streams
myOutputStream.flush();
myOutputStream.close();
data.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
vview.setKeepScreenOn(true);
vview.setVideoPath(videoFile.getAbsolutePath());
vview.start();
Run Code Online (Sandbox Code Playgroud) 对我来说,在源文件中定义和声明静态函数是一个规则,我的意思是.c文件.
然而,在非常罕见的情况下,我看到人们在头文件中声明它.由于静态函数具有内部链接,我们需要在包含声明函数的头文件的每个文件中定义它.这看起来很奇怪,远非我们通常在将某些东西声明为静态时所需要的.
另一方面,如果有人天真地尝试使用该功能而没有定义它,编译器会投诉.所以在某种意义上说这甚至听起来很奇怪并不是不安全的.
我的问题是:
我理解委托人的声明是这样的:
public delegate int PerformCalculation(int x, int y);
Run Code Online (Sandbox Code Playgroud)
但是,必须有更多的事情发生.委托的目的是提供指向方法的指针,为此,您将对方法的引用封装在委托中.
这个参考是什么类型的结构(代表内部)?我也明白你可以在委托中封装对多个方法的引用.这是否意味着委托中有一个包含这些数组的数组?
此外,委托中定义了哪些方法等.当您使用简洁声明委托时,实际发生了什么:
public delegate int PerformCalculation(int x, int y);
Run Code Online (Sandbox Code Playgroud)
?
编辑:一些澄清.声明委托时,编译器会自动创建一个从System.MulticastDelegate继承的密封类.如果你用ildasm查看你的程序集,你可以看到这个.这很整洁.基本上,使用一个语句,您将在编译时获得为您生成的全新类,并且它具有您需要的所有功能.
我使用Rhino Mocks作为单元测试的模拟框架.
我有一个名为Subject的类,它是我想要测试的类.它依赖于IStore.
IStore定义如下:
//internal interface : has InternalsVisible to both "Subject"
//and "StoreTests" class namespaces
internal interface IStore {
void Store(string name);
//other methods
}
Run Code Online (Sandbox Code Playgroud)
Subject类定义如下:
class Subject : IStore {
private IStore internalStore;
//constructor injection
void Subject(IStore store) {
internalStore = store;
}
void Store(string name) {
internalStore.Store(name);
}
//other methods
}
Run Code Online (Sandbox Code Playgroud)
我使用RhinoMocks的测试类如下:
//test class
class StoreTests {
Subject subject = new Subject();
[Test]
public StoreTest() {
//Arrange
var mockStore = MockRepository.GenerateMock<IStore>();
string testName = "test";
mockStore.Expect(x => …
Run Code Online (Sandbox Code Playgroud) 有可能获得Android设备的内部下载文件夹路径吗?
我正在尝试将Android.graphics.Path的对象存储在内部设备内存中.有谁知道如何序列化android.graphics.Path对象?还有,还有其他存储Path对象的方法吗?谢谢.
是否允许在Android内部存储器中创建文件夹?示例:
- data
-- com.test.app (application's main package)
---databases (database files)
---files (private files for application)
---shared_prefs (shared preferences)
---users (folder which I want to create)
Run Code Online (Sandbox Code Playgroud)
我可以users
在内部存储器中创建文件夹吗?