由于多重继承是不好的(它使源更复杂),C#不直接提供这样的模式.但有时候拥有这种能力会有所帮助.
例如,我能够使用接口和三个类来实现缺少的多继承模式:
public interface IFirst { void FirstMethod(); }
public interface ISecond { void SecondMethod(); }
public class First:IFirst
{
public void FirstMethod() { Console.WriteLine("First"); }
}
public class Second:ISecond
{
public void SecondMethod() { Console.WriteLine("Second"); }
}
public class FirstAndSecond: IFirst, ISecond
{
First first = new First();
Second second = new Second();
public void FirstMethod() { first.FirstMethod(); }
public void SecondMethod() { second.SecondMethod(); }
}
Run Code Online (Sandbox Code Playgroud)
每次我向其中一个接口添加方法时,我都需要更改类FirstAndSecond.
有没有办法将多个现有类注入一个新类,就像在C++中一样?
也许有一种使用某种代码生成的解决方案?
或者它可能看起来像这样(假想的c#语法):
public class FirstAndSecond: IFirst from First, ISecond …Run Code Online (Sandbox Code Playgroud) C#中是否有一种方法可以直接从System.IO.Stream播放音频(例如MP3),例如从WebRequest返回而不将数据临时保存到磁盘?
在NAudio 1.3 的帮助下,可以:
如果能够播放半载MP3文件本来不错,但由于NAudio库设计,这似乎是不可能的.
这是完成工作的功能:
public static void PlayMp3FromUrl(string url)
{
using (Stream ms = new MemoryStream())
{
using (Stream stream = WebRequest.Create(url)
.GetResponse().GetResponseStream())
{
byte[] buffer = new byte[32768];
int read;
while ((read = stream.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, read);
}
}
ms.Position = 0;
using (WaveStream blockAlignedStream =
new BlockAlignReductionStream(
WaveFormatConversionStream.CreatePcmStream(
new Mp3FileReader(ms))))
{
using (WaveOut waveOut = new WaveOut(WaveCallbackInfo.FunctionCallback()))
{ …Run Code Online (Sandbox Code Playgroud) 有没有办法char(64)在一个MS SQL Server数据库中的任何表的任何列内搜索一个值(在我的情况下,它是该类型的UID )?
我坐在一个巨大的数据库前,不知道如何将表连接在一起.为了找到它,我想列出所有表,并列出任何行中包含特定值的列.那可能吗?
一种方法可能是将整个数据库转储到文本文件中,而不是使用任何文本编辑器来搜索值 - 但如果数据库太大,这将是非常痛苦的.
在Python中删除错误路径字符(例如Windows上的"\"或":")的最跨平台方法是什么?
因为似乎没有理想的解决方案,我决定相对限制,并使用以下代码:
def remove(value, deletechars):
for c in deletechars:
value = value.replace(c,'')
return value;
print remove(filename, '\/:*?"<>|')
Run Code Online (Sandbox Code Playgroud) 我想为微控制器(Atmel XMEGA)创建一个GUI驱动的应用程序,该应用程序连接到128x64点图形LCD(EA DOGL128-6)和4个导航按钮.
控制显示器本身(例如绘制像素和字符)是没有问题的,但是为了防止我重新发明轮子,我在google搜索用C语言编写的GUI-Library/-Toolkit,包括它的源代码,将运行在32 MHz 8位微控制器,至少提供以下控制:
但我没有找到任何有用的东西.有没有人知道(或更好地使用)这样的库(最好是免费的)?
在Windows批处理文件中,我想知道这个批处理文件的完全限定路径名是什么.
我尝试了%0但这只给了我输入的命令(例如只有没有路径或扩展名的文件名).
我有一个包含大约800个变更集的Mercurial存储库,我需要找到第一个变量集,其中出现了单词Example.该单词出现在.php文件中,而不是在提交注释等.
什么是最快/最简单的方法呢?
我在序列化时观察到一种奇怪的行为,而不是反序列化具有类型成员的类,该类List<T>在构造时填充了默认值.与基于数组的属性不同List<T>,XmlSerializer在反序列化时不会清空类型的属性.
这是我的代码:
public class Program
{
public class Config
{
public Config()
{
Test1 = new List<string>() {"A", "B"};
Test2 = new String[] {"A", "B"};
}
public List<string> Test1 {get;set;}
public string[] Test2 {get;set;}
}
public static void Main()
{
XmlSerializer xmlSerializer =
new XmlSerializer(typeof(Config));
using(Stream s = new MemoryStream())
{
xmlSerializer.Serialize(s, new Config());
s.Position = 0;
xmlSerializer.Serialize(Console.Out,
xmlSerializer.Deserialize(s));
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是输出:
<?xml version="1.0" encoding="ibm850"?>
<Config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Test1>
<string>A</string>
<string>B</string>
<string>A</string>
<string>B</string>
</Test1>
<Test2> …Run Code Online (Sandbox Code Playgroud) 我无法理解为什么Program.Fetch1,Program.Fetch2也不会导致完全相同的执行顺序.唯一的区别是Program.Fetch1调用Program.Fetch实际的获取操作.
class Program
{
static IEnumerable<int> Fetch1()
{
using (Context c = new Context())
{
return Fetch(c);
}
}
static IEnumerable<int> Fetch(Context c)
{
foreach (int i in c.Fetch())
{
yield return i;
}
}
static IEnumerable<int> Fetch2()
{
using (Context c = new Context())
{
foreach (int i in c.Fetch())
{
yield return i;
}
}
}
static void Main(string[] args)
{
Console.WriteLine("Fetch1:");
foreach (int i in Fetch1())
{
Console.WriteLine(i);
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写将任意大字节数组(大于64位)转换为c#中表示为字符串的十进制数的函数,我根本无法弄清楚如何去做.
例如以下代码......
Console.WriteLine(ConvertToString(
new byte[]
{
0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88,
0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, 0x00
}));
Run Code Online (Sandbox Code Playgroud)
..应打印出来
22774453838368691933757882222884355840
Run Code Online (Sandbox Code Playgroud)
我不想仅仅使用像biginteger这样的额外库,因为我希望它很简单并且想要了解它是如何工作的.